Mailinglisten-Archive |
> Rudolf Koch wrote: > action application/x-httpd-php3 "/php3/php.exe" > > Ich weiß nicht, was der pfad am ende bedeuten soll und ob ich den gegebenfalls noch ändern muss. CGI PHP kann man so aktivieren: 1. Man definiert ein Verzeichnis als CGI Verzeichnis: <Directory /home/www/servers/phplib.shonline.de/cgi/> Options ExecCGI AllowOverride None </Directory> Hier wird das Verzeichnis /home/www/.../cgi als Verzeichnis zur Ausführung von CGI-Dateien gekennzeichnet, indem für das Verzeichnis das ExecCGI Attribut gesetzt wird. 2. Man definiert für dieses Verzeichnis eine URL ScriptAlias /cgi/ /home/www/servers/phplib.shonline.de/cgi/ Die URL /cgi/ wird jetzt auf dieses Verzeichnis /home/www/.../cgi/ abgebildet. Man kann jetzt in diesem Verzeichnis eine ausführbare Datei ablegen, die den folgenden Text ausgibt: ----- Content-Type: text/plain Hallo, Welt. ----- Dies kann zum Beispiel eine Batch- oder Scriptdatei in der lokalen Scriptsprache es Systems sein. Wenn man diese Datei unter der URL http://meinserver.de/cgi/name_des-scripts aufruft, muss man den Text "Hallo, Welt." angezeigt bekommen. Gelingt dies nicht, sollte man durch das Error Log toben und nachsehen, was dort schiefgeht. 3. Man installiert den PHP-Interpreter im CGI-Verzeichnis und prüft, ob man ihn als CGI-Programm aufrufen kann. Dazu ist der Interpreter nach /home/www/.../cgi zu kopieren und dann unter der URL http://.../cgi/php oder http://.../cgi/php.exe oder wie immer der Interpreter heißt aufzurufen. Dabei MUSS die folgende Fehlermeldung kommen: Security Alert! PHP CGI cannot be accessed directly. This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set. This variable is set, for example, by Apache's Action directive redirect. Kommt die Meldung nicht, ist das PHP-Binary unsicher und sollte durch ein korrekt compiliertes Binary ersetzt werden. 4. Man definiert eine Scriptaktion, die das o.a. Binary startet und definiert eine Endung, die durch diese Aktion abgehandelt wird: a) Dies Action php3-script /cgi/php teilt dem Apache mit, daß der interne MIME-Typ "php3-script" durch die URL /cgi/php (oder wie immer die URL zum Aufruf des PHP-Interpreters aus Schritt 3 heißt)abgehandelt wird. Der MIME-Typ "php3-script" ist illegal und das ist gut so, denn er wird nur innerhalb von Apache verwendet (er darf nur innerhalb von Apache verwendet werden!). b) Dies AddHandler php3-script .php3 teilt Apache weiterhin mit, daß die Endung .php3 durch den MIME-Handler für den MIME-Type php3-script abgehandelt wird. Damit ist man fertig. Was passiert im einzelnen, wenn http://.../test.php3 abgerufen wird? 1. Apache stellt fest, daß eine Datei mit der Endung .php3 verlangt wird. Dafür wird intern der MIME-Type php3-script erzeugt. 2. Apache stellt fest, daß der MIME-Type php3-script durch einen Handler definiert ist und führt intern ein URL Redirect von /test.php3 nach /cgi/php/test.php3 durch (oder wie immer man die Action definiert hat). 3. Die URL /cgi/php/test.php3 verweist auf das URL-Verzeichnis /cgi, für das per Scriptalias ein physikalisches Verzeichnis definiert ist: /home/www/.../cgi. Da die Zugriffsrechte eine Ausführung von CGI in diesem physikalischen Verzeichnis erlauben, wird /home/www/.../cgi/php gestartet und die Komponente /test.php3 wird dieses Programm als CGI-Variable PATH_INFO übergeben. 4. PHP liest die php3.ini-Datei und stellt dort eine document_root fest. Es nimmt sich diesen Pfadnamen und klebt PATH_INFO dahinter. Diese Datei dann durch den Interpreter geöffnet und ausgeführt. Stimmt die php3.ini-document_root nicht mit der DocumentRoot von Apache überein, kann die Datei nicht gefunden werden. Erlauben die Zugriffsrechte der Datei kein Lesen der Datei durch den Interpreter (suexec beachten!), kann die Datei nicht ausgeführt werden. Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.shonline.de/ (GPL)
php::bar PHP Wiki - Listenarchive