php
« Vorherige BeiträgeAuth_imp: Die benötigte IMAP-Erweiterung wurde nicht gefunden
Mittwoch, 29.09.2010Wenn Sie beim Einloggen in das WebMail Programm “Horde” plötzlich folgende Fehlermeldung erhalten, dann hilft Ihnen dieser Artikel weiter:
Ein schwerer Fehler ist aufgetreten: Auth_imp: Die benötigte IMAP-Erweiterung wurde nicht gefunden. Details wurden für den Administrator mitgeloggt.
Installieren Sie die IMAP Erweiterung für PHP (hier PHP V5) auf Ihrem Server:
apt-get install php5-imap
… und vergessen Sie den Neustart des Apache Webservers nicht:
/etc/init.d/apache2 restart
Anschließend können Sie die Anmeldung bei “Horde” erneut durchführen und werden Erfolg haben.
Einen Hinweis für die Fehlersuche bei Horde:
Über die folgende URL können Sie auf Ihrem Server die Konfiguration von Horde testen. Dadurch können Sie leicht fehlende Abhängigkeiten entdecken und beheben:
http://url-zu-ihrer-horde-installation/imp/test.php
Fatal error: Call to undefined function curl_init() in /home/…/ip-logger/…/class.ipdetails.php
Mittwoch, 29.09.2010Die folgende Meldung zeigt an, dass das Modul “php5-curl” nicht installiert wurde:
Fatal error: Call to undefined function curl_init() in /home/.../wp-content/plugins/.../class.ipdetails.php on line 29
Mithilfe des Befehles “apt-get install php5-curl” können Sie z.Bsp. unter Debian dieses Modul einfach nachinstallieren und nutzen.
WordPress: Deine PHP-Installation scheint nicht über die von WordPress benötigte MySQL-Erweiterung zu verfügen
Dienstag, 28.09.2010Beim Aufruf Ihrer Webseite erhalten Sie folgende Meldung ?
Deine PHP-Installation scheint nicht über die von WordPress benötigte MySQL-Erweiterung zu verfügen.
Prüfen Sie bitte, ob auf Ihrem Server die folgenden Programme (Module) richtig installiert sind:
- PHP
- mySQL
- php5-mysql
Sollte z.Bsp. “php5-mysql” fehlen, dann können Sie unter Debian mithilfe des Befehles “apt-get install php5-mysql” dieses Modul nachinstallieren. Anschließend sollte Ihre Webseite (wieder) richtig funktionieren.
VirtualMin: PHP Prozesse automatisch beenden (zu viele PHP Prozesse)
Samstag, 07.08.2010Wenn Sie mit VirtualMin Ihren Server (evtl. virtuellen Server = VServer) verwalten, dann stehen Sie manchmal vor dem einfachen (aber relativ gefährlichen) Problem, dass Ihnen die PHP Prozesse Ihren verfügbaren Arbeitsspeicher (RAM) füllen. Zwar ist die Speicherverwaltung von Debian Linux darauf ausgelegt, benutzten Speicher nicht sofort wieder freizugeben, sondern dieses erst bei Bedarf zu machen. Trotzdem kann dieses Verhalten Ihren Server in Performanceprobleme bringen oder Zugriffe scheitern lassen (Error 503 – “Service unavailable”).
Eine Lösung ist, in der VirtualMin Oberfläche die Einstellungen anzupassen:
- System Settings > Server Templates
- “Default Settings” anklicken
Nutzen Sie für Ihre Server ein eigenes Template, nutzen Sie jenes - Edit template section = “Apache website”
- Setzen Sie “Default FCGId PHP sub-processes” auf “None”
- Klicken Sie ganz unten auf “Save”
- Starten Sie den Apache Webserver einmal neu
- Wechseln Sie in den WebMin Bereich (oben links im Bildschirm)
- Servers > Apache Webserver
- Klicken Sie auf “Apply Changes” (oben rechts im Bildschirm)
- Fertig
Nun werden nicht mehr benötigte PHP Prozesse sofort nach Ihrem Ablauf auch entfernt und es steht wieder mehr Server-RAM zur Verfügung.
PHP: GUID erstellen (flexible Länge und Struktur)
Mittwoch, 28.07.2010Um in PHP eine GUID (Globally Unique Identifier) zu erzeugen (wie Sie sie ggf. aus C# und anderen Programmiersprachen kennen), hilft Ihnen die folgende Funktion weiter:
function getGUID($len = 36) { $tmp = ""; $pos = array(8,13,18,23); while (strlen($tmp) < $len) $tmp .= md5(uniqid()); foreach ($pos as $p) if ($p <= $len) $tmp[$p] = "-"; return substr($tmp,0,$len); }
Ausgabe (Beispiel):
echo getGUID(); 3470b4e8-d6fe-1f76-6c09-0d31828e8a1d echo getGUID(20); 8b31eeb6-b451-a61d-f
Die Lage der Trennzeichen (“-”) können Sie durch das Array “$pos” bestimmen, die Länge der GUID durch den Parameter “$len”. Wenn Sie keinen Parameter übergeben, ist die GUID automatisch 36 Zeichen lang.
PHP: Apache2 Version in Variable auslesen
Mittwoch, 21.07.2010Damit Sie auf einem Unix (Linux) System einfach die aktuelle Version des Apache WebServers herausfinden können, zeigen wir Ihnen ein PHP-Beispiel.
In dem PHP Script wird die Apache-Funktion “apache2ctl” genutzt, die die aktuelle Apache-Version auszulesen. Dieser Befehl wird mithilfe des PHP Befehles “passthru()” direkt an das Linuxsystem weitergegeben.
Hinweis:
Häufig ist auf “öffentlichen” Webservern aus Sicherheitsgründen die Nutzung einiger Befehle gesperrt. Dazu zählt häufig auch der Befehl “passthru()”. Wenn das Script bei Ihnen lokal auf dem Computer also einwadnfrei läuft und auf Ihrem Internetserver keine Daten zurück gibt, liegt diese Befehlssperre vor. Eine Möglichkeit, diese Sperre aufzuheben hat nur Ihr Web-Administrator (oder Provider).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // PHP Version auslesen ob_start(); passthru("apache2ctl -v"); $ver = ob_get_contents(); if empty($ver) echo "passthru() disabled ?"; ob_end_clean(); $a = explode("\n", $ver); preg_match('/(server version: ){1}(.*)/i', $a[0], $v); $data[0] = $v[2]; preg_match('/(server built: ){1}(.*)/i', $a[1], $v); $data[1] = date("d.m.Y H:i:s", strtotime($v[2])); print_r($data); ?> |
PHP: Zugriff von Browsern außerhalb eines IP-Subnetzes unterbinden
Montag, 19.07.2010Mithilfe des folgenden PHP Scripts können Sie Besucher außerhalb des festgelegten IP Bereiches blockieren:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php if (strncmp("192.168.0", $_SERVER["REMOTE_ADDR"], 9) != 0) { // Block access header("HTTP/1.0 403 Forbidden"); // header('Location: http://www.google.com'); exit; } else { // Allow access echo "Zugriff erlaubt ..."; } ?> |
In diesem Beispiel werden alle Besucher, deren IP Adresse nicht mit “192.168.0″ anfängt, blockiert.
Dieser IP Bereich wird nur LAN intern verwendet. Für die Filterung von Besuchern aus dem WAN (Internet) filtern Sie bitte auf die öffentliche IP Adresse Ihrer Webseitenbesucher. Passen Sie dabei auch die Länge der zu vergleichenden Zeichen an (im o.a. Beispiel werden die ersten 9 Zeichen verglichen). Diese können Sie sich mithilfe des folgenden PHP Scripts anzeigen:
1 2 3 | <?php echo $_SERVER["REMOTE_ADDR"]; ?> |
SQLite: Datenbank erstellen, Tabellen erstellen, Daten einfügen & Daten abfragen
Dienstag, 13.07.2010Um eine kurze Einführung in die SQLite Datenbank zu bekommen, hilft Ihnen folgendes PHP-Script:
Das Beispiel zeigt Ihnen, wie Sie zuerst eine Datenbankverbindung aufbauen (dadurch automatisch auch die Datenbankdatei erstellen) und anschließend zwei Tabellen erstellen. Danach wird jeweils ein Datensatz in eine Tabelle eingefügt und im letzten Schritt wieder zusammen ausgelesen (joind).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php // Datenbank anlegen (Dateiname: "test.dat") $db = sqlite_open("test.dat", 0660, $error); // Die Tabellen anlegen: "kunde" und "domain" sqlite_query($db, 'CREATE TABLE kunde (id integer PRIMARY KEY, code varchar(10))'); sqlite_query($db, 'CREATE TABLE domain (id integer, kunde integer, name varchar(10))'); // Datensätze einfügen sqlite_query($db, "INSERT INTO kunde (code) VALUES ('fnord')"); sqlite_query($db, "INSERT INTO domain (id,kunde,name) VALUES (1, 1, 'www.webseite.de')"); // Daten verbinden und abfragen $res = sqlite_query($db, 'select * from kunde k left join domain d on d.kunde = k.id'); $res = sqlite_fetch_all($res, SQLITE_ASSOC); // Ergebnis anzeigen print_r($res); ?> |
In unserem Beispiel hat die Datenbank den Dateinamen “test.dat”. In der Wahl des Dateinamens sind Sie nur an die Restriktionen Ihres Betriebssystems gebunden. Häufig wird jedoch auch der Suffix “.sqlite” genutzt. (Suffix = Dateiendung)
Um die auf Ihrem System aktuell genutzte Version von SQLite auszulesen, nutzen Sie folgenden Befehl:
echo sqlite_libversion();
Wenn Sie die derzeit eingestellte Codierung herausfinden möchten:
echo sqlite_libencoding();
PHP: Alter anhand des Geburtstags berechnen
Montag, 12.07.2010Mit der folgenden PHP-Funktion könnten Sie anhand des Geburtstags das aktuelle Alter in Jahren ermitteln.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * Ermittelt das aktuelle Alter anhand einess Datums * @param string $birthday Der Geburstag im Format YYYY-MM-DD * @param string $delimiter Trennzeichen * @return integer Das Alter in Jahren */ function getAgeFromBirthday($birthday, $delimiter = '-') { if (empty($birthday)) return false; $exp = explode($delimiter, $birthday); if (count($exp) != 3 || !checkdate((int)$exp[1], (int)$exp[2], (int)$exp[0])) return false; $age = (int)date("Y") - (int)$exp[0]; if ((int)$exp[1] > (int)date("m") || ((int)$exp[1] == (int)date("m") && (int)$exp[2] > (int)date("d"))) $age--; return $age; } |
Der Aufruf könnte z.B. so ausschauen:
var_dump(getAgeFromBirthday(’1995-06-08′));
Linux: Fatal error: Call to undefined function imap_open()
Freitag, 07.05.2010Wenn Sie beispielsweise nach der Installation des Webmailprogrammes “Horde” die folgende Meldung angezeigt bekommen, kann Ihnen dieser Artikel helfen:
Fatal error: Call to undefined function imap_open()
Grund für die Meldung ist die fehlende IMAP Unterstützung in PHP. In diesem Artikel erkläre ich die Lösung für Linux Debian lenny (V5). Andere Systeme benötigen teilweise einen kompletten Neubau von PHP (= Neucompilierung / Recompiling).
Zuerst muss das fehlende Paket instelliert werden:
apt-get install php5-imap
Ihnen werden Details angezeig und am Ende werden Sie gefragt:
Do you want to continue? [Y/n/?]
Hier antworten Sie bitte mit “y”.
Die automatische Installation beginnt und kann einen kurzen Moment brauchen.
Wichtig ist, dass Sie danach Ihren Apache Webserver mit einem der beiden folgenden Befehle neu starten:
apache2ctl graceful /usr/sbin/apache2ctl graceful
Fertig.
Beim Einsatz von Horde haben wir teilweise die Cookies im Browser löschen müssen. Außerdem half häufig auch das Umsetzen der Cookie-Verarbeitung. Weitere Details finden Sie in unserem Artikel “Horde: Nach dem erfolgreichen Login wird wieder der Login angezeigt“.
« Vorheriger Beitrag