snippets
-
Drupal: Files Ordner verschieben
Verfasst von jan am Fr, 05/28/2010 - 15:20Um den Files Ordner zu verschieben (in meinem Fall im Private Mode), geht man folgendermassen vor:
- per FTP oder shell die Daten an den neuen Ort verschieben
- shell: mv <pfad>/files <neuer pfad>/files
- per FTP sicherstellen das .htaccess Datei mitgneommen wird
- Folgender MYSQL Befehl ausführen (zB in mysqladmin)
- update files set filepath = replace(filepath,'<alter Pfad>','<neuer Pfad>');
- Nach admin/settings/file-system gehen
- neuer Pfad angeben
- Fertig
Achtung: <...> ersetzen durch eigene Werte!
- per FTP oder shell die Daten an den neuen Ort verschieben
-
PHP: Dateien und Ordner rekursive Umbenennen
Verfasst von jan am Fr, 05/21/2010 - 21:36Ein altbekanntes Problem der deutschen Sprache im Zusammenhang mit Linux-Dateinamen: Ich habe von meinem Windows System Dateien per FTP hochgeladen und die eingekaufte PHP Anwendung kann nicht richtig mit den Umlauten im Dateinamen umgehen (oder anderen Sonderzeichen, welche Windows im Dateinamen erlaubt). Also lass ich per PHP Script einen ganzen Verzeichnisbaum rekursive durchgehen und alle Umlaute/Sonderzeichen umwandeln. Das geht mit folgendem Snippet:
<?php
// Directory to scan (Full System Path)
$dir = './';
function cleanName($name)
{
$name = str_replace('ä', 'ae', $name);
$name = str_replace('ö', 'oe', $name);
$name = str_replace('ü', 'ue', $name);
$name = str_replace('Ä', 'Ae', $name);
$name = str_replace('Ö', 'Oe', $name);
$name = str_replace('Ü', 'Ue', $name);
return $name;
}
function getDirectory($path = '.', $ignore = '')
{
$dirTree = array();
$dirTreeTemp = array();
$ignore[] = '.';
$ignore[] = '..';
$dh = @opendir($path);
while (false !== ($file = readdir($dh))) {
if (!in_array($file, $ignore)) {
if (!is_dir("$path/$file")) {
$dirTree["$path"][] = $file;
} else {
$dirTree["$path"] = array();
$dirTreeTemp = getDirectory("$path/$file", $ignore);
if (is_array($dirTreeTemp))
$dirTree = array_merge($dirTree, $dirTreeTemp);
}
}
}
closedir($dh);
return $dirTree;
}
// Get all Files and Folders in an Array
$dirTree = getDirectory($dir, $ignore);
$folders = array();
foreach ($dirTree as $path => $files) {
foreach ($files as $name) {
if (preg_match('/[äöüÄÖÜ]/', $name)) {
echo 'rename(' . $path . '/' . $name . ', ' . cleanName($name) . ');<br></br>';
rename($path . '/' . $name, $path . '/' . cleanName($name));
}
}
$folders[substr_count($path, '/')][] = $path;
}
// Sortiert Ordner nach "Tiefe"
krsort($folders);
// Benennt alle Ordner mit Umlauten um
foreach ($folders as $paths_by_debth) {
foreach ($paths_by_debth as $path) {
$pos = strrpos($path, '/');
$folder = substr($path, $pos);
if (preg_match('/[äöüÄÖÜ]/', $folder)) {
echo 'rename(' . $path . ',' . substr($path, 0, $pos) . cleanName($folder) . ');<br></br>';
rename($path, substr($name, 0, $pos) . cleanName($folder));
}
}
}
?>
<pre>
<?php
// Gibt den ganzen Ordner Baum aus
//print_r($dirTree);
?>
</pre>Das Programm wurde absichtlich ausführlich geschrieben, um die Einzelnen Schritte klar und verständlich darzustellen. Natürlich könnte man das ganze auch abgekürzter schreiben. Die Funktion cleanName kann beliebig erweitert werden. Hier könnte man auch via preg_replace bestimmte Dateinamen nach einem Muster umbenennen.
-
Excel Werte als Bytes und Bites formatieren
Verfasst von jan am Do, 12/03/2009 - 16:45Schon mal versucht in Microsoft Excel Bites in Kilobytes, Megabytes oder Gigabytes umzuwandeln. Hier ist die Formel, um Bites in Bytes umzuwandeln:
=WENN((A1>=POTENZ(2;33));TEXT((A1/POTENZ(2;33));"##0.00\G");WENN((A1>=POTENZ(2;23)); TEXT((A1/POTENZ(2;23));"##0.00\M");WENN((A1>=8192);TEXT((A1/8192);"##0.00\K");TEXT((A1/8);"##0.00\B"))))
Mit dieser Zeile in einer Zelle wird der Wert in der vorderen Spalte (selben Zeile), welcher als Bite-Wert vorliegt, in MB, KB, oder B umgerechnet. "A1" ist die Zelle, welche die anzahl Bites enthält. -
Regular Expressions, nur Buchstaben verwenden inklusive Umlaute
Verfasst von jan am Di, 11/24/2009 - 10:52Deutschsprachige Hilfen für Umlautprobleme sind im Internet immer selten gesät. Hier die Lösung des Problems, wenn man alle Zeichen aus einem String filtern will, welche in deutschen Wörtern nicht vorkommen dürfen:
$filteredword = utf8_encode(preg_replace('/[^a-zA-Z-äöüÄÖÜéàèÉÈ]/i','',$inputstring));Erklärung:
$filteredwordist der gefilterte String ohne unerlaubte Zeichen$inputstringist der String, welcher noch unerlaubte Zeichen enthältutf8_encode: wandelt den gefilterten String in UTF8 um. Dies ist notwendig, wenn man zum Beispiel später den String in einer MYSQL-Datenbank verwenden willmit
preg_replacewerden alle Zeichen, welche dem Suchmuster entsprechen herausgefiltert. In unserem Fall sind das alle Zeichen, welche in den eckigen Klammern stehen.[^a-zA-Z-äöüÄÖÜéàèÉÈ]: [^...] filtert alles raus ausser "..."a-zA-Z: bedeutet alle Buchstaben-: Bindestrich oder Minus sind in der deutschen Wörtern auch erlaubtäöüÄÖÜéàèÉÈ: die spezial-Zeichen. Für uns Schweizer sinds eben noch ein paar mehr. Kann beliebig mit weiteren Zeichen ergänzt werden.mit
'/.../'wird die Reguläre Expression eingegrenzt/ibedeutet: Gross und Kleinschreibung wird nicht berücksitigt; könnte man wahrscheinlich hier auch weglassen