Re: php-cgi Port

From: Jens Rehsack <rehsack(at)liwing.de>
Date: Mon, 18 Aug 2003 20:31:23 +0200

On 18.08.2003 19:02, Benjamin Thelen (CCGIS) wrote:

>> On 18.08.2003 17:00, Benjamin Thelen (CCGIS) wrote:
>>
>>>> On 15.08.2003 19:18, Benjamin Thelen (CCGIS) wrote:
>>>>
>>>>> Moin zusammen,
>>>>
>>>> Selber Moin, vor zwölf, echt und so munter, elend :-)
>>>>
>>>> [...]
>>>>
>>>>> Danach habe ich wie oben beschrieben, das php-binary eben nach
>>>>> .../www/cgi-bin kopiert und es funktionierte auch.
>>>>>
>>>>> Mit dem php4-cgi Port geht das so aber nicht. Muss ich was anderes
>>>>> machen oder ist meine Vorgehensweise doch richtig?
>>>>>
>>>>> Vielen Dank,
>>>>> Benjamin
>>>>>
>>>>>
>>>>> PS: Genau das gleiche Problem habe ich auf debian woody auch. Hier
>>>>> gibt
>>>>> es ein php4-cgi deb-Paket. Das habe ich nicht mit der oben
>>>>> beschriebenen
>>>>> Art und Weise ans laufen bekommen. Als Apache Modul, alles kein
>>>>> Problem.
>>>>> PHP läuft.
>>>>
>>>> Was steht denn in den /var/log/httpd-error.log und
>>>> /var/log/httpd-suexec.log
>>>> (je nach httpd.conf entsprechend anders)?
>>>>
>>>> So long,
>>>> Jens
>>>>
>>>>
>>>>
>>>
>>> Moin Jens,
>>>
>>> Wie vor zwölf?? War doch früher Abend!
>>
>> Tja, 'Moin' und mitten in der Nacht gelesen (ich) hat halt
>> falschen Schluss gefolgert :-)
>>
>> Bitte immer die Liste CC'en!
>
>
> Das war ein Versehen. Ich hätte mich wahrscheinlich recht lange gewundert,
> wo meine Mail bleibt! :-)
>
>>
>>> Zu Deiner Frage:
>>> Ich habe lediglich eine httpd-access.log und eine httpd-error.log?!
>>> In der httpd-access.log steht nur, dass zugegriffen wurde, mehr nicht.
>>>
>>> Folgendes habe ich ausprobiert:
>>>
>>> 1. php-binary liegt im cgi-bin-Verzeichnis
>>> (manuell kopiert von /usr/local/bin/ nach /usr/local/www/cgi-bin)
>>
>> Steht als erstes im PHP-Skript ein She-Bang für /usr/local/bin/php?
>> Sollte in etwa so aussehen:
>>
>> #!/usr/local/bin/php
>
>
>
> Es erscheint leider nachwievor die gleiche Fehlermeldung.

Ist das Zeilenformat Unix (zeigt 'vi datei.php' komische ^M's)?

> Mein PHP-Kollege meinte allerdings auch, dass das bei php nicht nötig
> wäre. Es steht in keinem einzigen unserer Skripte.

Doch, bei CGI ist es nötig, da der Web-Server es ausführt.

> Die Skripte funktionieren ja auch, wenn php4 als Apache-Modul installiert
> ist und sie funkionieren auch auf dem FreeBSD 4.7 mit dem von mir
> verbogenen mod_php4. Auf diesem Rechner läuft php4 definitiv als cgi, die
> LoadModule Zeile in der httpd.conf ist auch auskommentiert.

Sind auch alle anderen PHP-bezogenen Sachen draußen?

>>> httpd-error.log: kein Eintrag
>>> Browser: "Parse error: parse error in /usr/local/www/cgi-bin-dist/php on
>>> line 6930"
>>
>> Als was wird die Datei vom Browser erkannt?
>
>
> Kann ich Dir so nicht sagen. Der Quelltext zeigt einfach nur folgendes an:
> <br />
> <b>Parse error</b>: parse error in <b>/usr/local/www/cgi-bin-dist/php</b>
> on line <b>6930</b><br />

Was benutzt Du für einen Browser?

[...]

>>> Ich habe auch noch mal das debian Package php4-cgi (äh, auf einem
>>> debian-Rechner, natürlich) installiert. Interessanterweise befindet sich
>>> nach der Installation ein php-binary im cgi-Verzeichnis. Zwar bekomme
>>> ich
>>> php-Skripte zum Download angeboten - was ich auch nicht verstehe - aber
>>> das ist eine andere Baustelle.
>>
>> Der Apache weiss, dass das keine HTML-Dateien, sondern PHP-Skripte sind,
>> und setzt den MIME-Type entsprechend. Dann weiss der Browser nix
>> damit anzufangen und bietet das Speichern an.
>
>
> Was ich nicht verstehe, ist dass so lange ich php als Apache Modul laufen
> habe, beide Rechner, von denen ich hier gerade schreibe, php-Skripte
> wunderbar ausführen und man diese auch im Browser angucken kann. Alles
> funktioniert. Dann deinstalliere ich php4 (oder mod_php4) und installiere
> php4-cgi und nix funktioniert mehr.

Da sollte sich mal jemand mit CGI beschäftigen, hm?
CGI ist ein Kommunikationsprotokoll zwischen Web-Server und
ausführbarer! Datei, wobei der Web-Server die Parameter
vom Browser dem Skript in STDIN übergibt und die Ausgabe auf
STDOUT erwartet.

D.h.:
1) Skripte und Binaries müssen ausführbar sein (x-bit)
2) Skripte müssen einen gültigen She-Bang haben
3) Sktipte müssen im Unix-Fileformat vorliegen.

> Im obigen Fall setzt doch dann offensichtlich der Webserver den MIME-Type
> falsch (obwohl er ihn zuvor als php4 noch als Modul lief richtig setzte).
> Das macht doch keinen Sinn?

Doch, macht es. Leider ziehen wir grade um, und ich kann Dir keine
Literaturempfehlung raussuchen, aber http://www.w3c.org/ und
http://httpd.apache.org/ wird Dir sicher auch Klarheit verschaffen
können.

> Übrigens sind bei Rechner in der Lage php-Skripte lokal zu parsen! Also
> sowas wie php -f file.php.

Und was ist mit './file.php'? Wenn das nicht geht, wird's im Web-Server
nie klappen.

Wie sieht es mit den Zugriffsrechten des Web-Servers auf die Dateien
aus (user,group,other)? Ist su-exec installiert?

>>> Ich schließe jedoch daraus und daraus, dass dass mit meinem
>>> "umgebogenen"
>>> mod_php4-Port bisher so funktionierte, dass sehr wohl ein php-binary im
>>> cgi-Verzeichnis zu liegen hat. Richtig?
>>
>> Möglich, kommt auf Dein Skript an.
>
> Muss ich passen. Verstehe ich nicht. Deine Aussage verstehe ich so, dass
> es skriptabhängig ist?? Je nachdem wie ich das php-Skript schreibe muss
> der "cgi-server" anders konfiguriert werden? Ich glaube, dann werde ich
> zum Hirsch. :-)

Nein. Ich meinte eher, Du hast u.U. einen Fehler im Skript, der es
benötigte, den php-Interpreter lokal liegen zu haben.

> Wie kann das denn so kompliziert sein mit dem dämlichen cgi? Das geht mir
> einfach nicht ein. Installiere ich php4 als Apache-Modul funktioniert auf
> beiden Rechner alles auf Anhieb.

Dann nimm das Modul.

> Kann es denn sein, dass debian das anders handhabt und das php-binary gar

Nein.

> nicht unbedingt im cgi-Verzeichnis liegen muss? Aber irgendwie muss dem
> Webserver das doch auch klar gemacht werden, woher er sein php-binary
> bekommt...?

Ja, aus dem She-Bang.

--- BEGIN DEMO CGI SCRIPT
#!/usr/local/bin/php
<HTML><HEAD><TITLE>Hallo Welt</TITLE></HEAD><BODY>
<?PHP

echo "<H1>Hallo Welt</H1>\n";
echo htmlentities( "Es grünt so grün wenn Spaniens Blüten " .
       "blühen" ) . "<BR>\n";

?>
</BODY></HTML>
--- END DEMO CGI SCRIPT

$ ls -l demo.cgi
-rwxr-xr-x [...] demo1.php

Gruss,
Jens

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 18 Aug 2003 - 20:31:49 CEST

search this site