programmieren
-
Eclipse vs. Netbeans für Drupal und PHP
Verfasst von jan am Mi, 08/25/2010 - 08:37Seit 2 Jahren benutze ich nun auch Eclipse zum entwickeln von Drupal Modulen in PHP. Richtig überzeugen konnte mich Eclipse jedoch nie. Ich fand das Programm einfach zu schwerlastig um PHP-Code damit zu erstellen. So habe ich nun seit einer Woche Netbeans im Einsatz. Der erste Eindruck scheint gelungen. Das ganze Programm kommt viel schlanker daher. Die Installation geht schnell und PHP kann man direkt als fertige Distribution herunterladen (ähnlich wie PHPEclipse).
Hier meine positiven Punkte:
- schneller Start des Programmes
- übersichtliche Oberfläche
- Projekt-Wizard sehr gut
- Projekte, welche auf einem entfernten Server getestet werden (via FTP) können als solche verknüpft werden, es ist also kein zusätzliches FTP Programm nötig
- bereits nach einem Tag kenne ich mehr Funktionen des Programmes als nach 2 Jahren Eclipse
- Plugin für Drupal
Negatives:- bisher noch nichts zu bemängeln
Achtung: Das Plugin für Drupal ist nicht aktuell. Auf der offiziellen Seite gibt es keine aktuelle Version. Ich habe aber für NetBeans 9.1 das Drupal Plugin hier gefunden -> http://hollyit.net/files/org-netbeans-modules-php-drupal-module.nbm . Es hat auch funktioniert. -
Drupal: XSend bzw mod_xsendfile auf Debian installieren
Verfasst von jan am Sa, 08/14/2010 - 13:00Für Apache gibt es ein super Modul, welches den Dateitransfer massiv verschnellert, bzw die Ladezeit bis zum Dateitransfer. Das Modul heisst mod_xsendfile. Ich hatte einige Probleme das Ding auf meinem Debian zum laufen zu bringen. So habe ich es gemacht:
- Wechseln zum Ordner für Apache Module (/usr/lib/apache2/modules; wenn anders dann kann man den modules Ordner suchen: find / -name 'modules')
- Source herunterladen mit Link (Link Datei; Link Seite)
- apxs2 -cia mod_xsendfile.c (Achtung, bei mir musste ich eine 2 an das apxs anhängen, ist nicht so auf Homepage beschrieben!)
- Bei mir kam dann am Schluss folgende Fehlermeldung:
-
- apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..
- apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
- Lösen kann man das Problem mit folgendem Trick:
- nano /etc/apache2/httpd.conf
- Die folgenden zwei Zeilen untereinander eintragen
- #LoadModule directive to aid module installations
#LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so - Wieder zumachen und speichern
- Apache neu starten (invoke-rc.d apache2 restart)
- Ich bin nicht ein Fan von Core-Patches, jedoch ziehe ich in diesem Fall ein solcher vor. Anstelle des xfile Modules von Drupal reicht es (für meinen Fall) in der includes/file.inc die Funktion file_transfer mit der Zeile "$headers[] = 'X-Sendfile: '.$source;" gerade nach dem ersten if {} Konstrukt einzufügen. Das Drupal modul xfiles ist so überflüssig.
function file_transfer($source, $headers) {if (ob_get_level()) {ob_end_clean();}$headers[] = 'X-Sendfile: '.$source;foreach ($headers as $header) {.. -
Drupal: PDF Vorschau als jpg, pdf2jpg
Verfasst von jan am Mo, 07/12/2010 - 14:39Immer schon wollte ich auf Webseiten pdf's als Bilder darstellen. Sinnvolle Hilfe dazu zu finden ist meiner Meinung nach eher schwierig. Für eine aktuelle Drupal-Installation wollte ich nun endlich mal einen Schritt weitergehen und meine Wünsche in etwas Handfestes umwandeln. Im Drupal CMS sollten sämtliche PDFs auch als jpg/png automatisch zur Verfügung stehen. Dazu habe ich ein neues Modul geschrieben, ich habs Preview genannt. Ich stellte mir vor, dass es in Zukunft verschiedene Dateitypen als Preview erstellen sollte, nicht nur PDFs. Zurzeit bin ich dran, das Modul so umzugestalten, damit ich es auf drupal.org contributen kann. Auf meiner vorhanden Drupalinstallation läuft es aber breits wie geschmiert. Ich werde bei Gelegnheit mehr Details dazu posten (wird auch vom Interesse von Euch abhängen...).Mein Fazit bis jetzt: Es ist alles was ich mir je gewünscht habe. Gerade grosse PDFs (bei uns handelt es sich um Baupläne, >90MB pro Seite) müssen so nicht heruntergeladen werden sondern werden innert Kürze in der "Vorschau" angezeigt.
screenshoots:
-
Drupal: Auf fremde/zweit Datenbank zugreifen
Verfasst von jan am Sa, 06/26/2010 - 12:38Problem: Auf der vorhanden Drupal Installation will ich auf Daten einer anderen Datenbank zugreifen. Drupal hat dafür bereits einen Weg vorgesehen. Dazu geht man in die sites/default/settings.php Datei. Folgende Zeile definiert die Standard Datenbank:
$db_url = 'mysql://drupal:drupal@localhost/drupal';
Wandelt man $db_url in ein Array um, kann man beliebig viele Datenbank definieren.:
$db_url['default'] ='mysql://drupal:drupal@localhost/drupal';
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
$db_url['db3'] ='mysql://user:pwd@localhost/yetanotherdb';Im Modul, wo man dann auf die Daten zugreifen will mach man das folderndermassen:
db_set_active('mydb');
db_query('SELECT * FROM table_in_anotherdb');
//...
db_set_active('default');Default ist die Standard-Datenbank. Sie ist erforderlich. In dieser Datenbank ist Drupal installiert. Man muss aufpassen, dass man nach dem Sprung in die andere Datenbank die default Datenbank wieder auf aktiv stellt.
Quelle: http://drupal.org/node/18429
-
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.
-
PHP Performance Tipps
Verfasst von jan am Do, 03/11/2010 - 11:00Heute bin ich auf einen interessanten Eintrag gestossen. Er nennt sich "PHP Script Tips: Cool Secrets of PHP" und birgt einige weniger bekannte Tipps zu PHP, welche ich jedem PHP-Programmierer empfehlen kann. Er behandelt u.a den Unterschied zwischen double quotes und single quotes, und wie es sich auf die Geschwindigkeit auswirken kann.
-
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