In Xampp für Windows ist mehr als eine php.ini enthalten! Welche ist die richtige für mich?
Erstellt in eurem Webroot (meist auch htdocs genannt) eine leere Datei, wobei der Name egal ist. Öffnet diese mit einem Editor eurer Wahl und fügt folgendes ein:
<?PHP phpinfo(); ?>
Speicher dies und rufe die Datei über einen Browser auf. Unter XAMPP für gewöhnlich http://localhost/dateiname.php
. Auf der Seite sucht nun nach “Loaded Configuration File”, dahinter steht der Pfad zur php.ini
die verwendet wird.
Die max_execution_time ist in der Standard Konfiguration auf 30 gesetzt und bewirkt das PHP-Scripte maximal 30 Sekunden ausgeführt werden können.
Dies kann hinderlich sein, wenn man z.B. über phpMyAdmin einen größeren Dump einspielen möchte. Die Einstellung kann in der php.ini geändert werden.
max_execution_time = 1200
(nicht vergessen den Apache, nach der Änderung, neu zu starten).
Die php.ini ist mehrmals zu finden, aber benutzt wird diejenige im Verzeichnis
Das php.ini Verzeichnis ist auch über phpinfo() im Auswahlmenü des XAMPP Willkommenscreen abzulesen.
Ein typisches Problem älterer Scripte ist, da sie das seit PHP 4.2 standardmässig deaktivierte register_globals
verwenden.
Wenn über ein Formular oder über die URL direkt Daten übertragen werden, so landen diese in bestimmten Variablen in PHP. Ist register_globals aktiviert, so kann man diese direkt aus dem globalen Geltungsbereich ansprechen. Ein Beispiel: http://www.domain.tld/index.php?page=news
. Dies überträgt an das Script index.php
den Bezeichner page
mit dem Inhalt “news”. Soweit so gut, aber was heißt das für das Script? Sollte register_globals
aktiviert sein, so kann man direkt die globale Variable page
nutzen, aber auch die “superglobale Variable” $_GET
, welche ein Array über alle per GET
übertragenen Inhalte beinhaltet.
echo $page; echo $_GET['page'];
Ist register_globals
allerdings deaktiviert, so entfällt erste Möglichkeit und der übertragene Inhalt kann nur über $_GET[’page’]
angesprochen werden. Es gibt noch andere Methoden, die aber bei der ersten Problemlösung nicht weiterhelfen.
Das Problem ist nun, dass viele ältere Programme oder aufmerksame Programmierer gerade die erste Variante verwenden, weil sie lange Zeit gang und gäbe waren und zudem eben erst ab PHP 4.2 register_globals
standardmässig deaktiviert ist. Ebenso aktivieren dies viele Webhoster, um ihren Kunden die Kompatibilität zu den alten Scripten zu erhalten. Es ist jedoch veraltet und sollte, speziell in Hinblick auf PHP 6, bei dem diese Option nicht mehr existieren wird, nicht mehr verwendet werden.
php.ini
den Eintrag auf “register_globals = On” setzenimport_request_variables()
(Notnagel)
Das genannte gilt ebenfalls für die Daten, die per Formular übertragen werden ($_POST[’bezeichner’]
), per Cookie ($_COOKIE[’bezeichner’]
) und Sessionvariablen ($_SESSION[’bezeichner’]
).
Wer noch mehr dazu wissen will, kann sich hier informieren:
Um mySQLi zu aktivieren, muss folgende Zeile zur php.ini
(siehe auch den vorstehenden Beitrag) hinzugefügt werden:
Im Absatz Dynamic Extension:
extension=php_mysqli.dll
Diese Zeile ist merkwürdigerweise in XAMPP 1.4.16 nicht als auskommentierte Vorlage vorhanden, also genauso eintragen wie oben angegeben. Die DLL-Dateien sind schon am richtigen Platz, hier braucht sich also um nichts gekümmert werden.
Eines der grössten Mysterien scheint ja das Versenden von Mails zu sein Grundsätzlich muss man hier erst einmal zwischen Windows und *nix unterscheiden.
SMTP = localhost smtp_port = 25 ;sendmail_from = me@example.com
Allerdings kann sich PHP nicht am Mailserver anmelden, heutzutage ein Muss bei den meisten Servern, so dass der Versand oft scheitert. Tatsächlich kann man auch unter Windows die Sendmail-Schnittstelle benutzen und beim XAMPP für Windows ist auch ein solches dabei. Dieses Sendmail verschickt dann die Mail über ein vorhandenes Mailkonto wie z.B. bei GMX. Wichtig ist nur, dass der Mailanbieter den Versand über SMTP zulässt.
Die Konfiguration ist eigentlich ganz einfach. Gehen wir mal von folgenden Daten aus:
smtp_server=mail.example.com auth_username=john.doe@example.com auth_password=geheim force_sender=john.doe@example.com
Alle anderen Werte lassen wir erst einmal deaktiviert (”;”).
sendmail_path = "\xampp\sendmail\sendmail.exe -t"
(Das Semikolon “;” wegmachen).
Jetzt können wir untere erste Mail verschicken:
<?php $to = 'jane.doe@example.com'; $subject = 'Testmail'; $message = 'Hallo, dies ist ein Test.'; $headers = 'From: John Doe <john.doe@example.com>'; mail($to, $subject, $message, $headers); ?>
Fertige PHP-Scripte konfiguriert man jetzt einfach dahingehend, dass sie das interne mail() oder Sendmail benutzen.
Sollte jetzt doch noch keine Mail versendet werden, kann man in der Datei \xampp\sendmail\sendmail.ini
noch einen oder beide der folgenden Punkte aktivieren (das Semikolon “;” wegmachen):
error_logfile=error.log debug_logfile=debug.log
Damit landen dann Fehlermeldungen und/oder die ganze Mail plus der Kommunikation mit dem Mailserver in den jeweiligen Dateien.
Abschliessend noch ein Hinweis auf die zwei PEAR-Pakete:
Mit diesen kann man in eigenen Scripten Mails direkt über SMTP (sammt Anmeldung am Relay-Server) verschicken.
In PHP können gezielt einzelne Funktionen abgestellt werden. Dies dient unter Anderen der Sicherheit. Will man z.B. die Funktion exec() abstellen, dann ist in der php.ini folgende Zeile einzufügen.
disable_functions = exec
Es können auch mehrere Funktionen auf einmal abgestellt werden. Dazu schreibt man sie hintereinander durch ein Komma getrennt.
disable_functions = exec, passthru, system, fopen