Hans-Otto: PHP-Counter als png-Datei und mysqli-Befehlen statt mysql

Beitrag lesen

hi, akan.

Das funktioniert vielleicht, ist aber nicht sonderlich schlau, weil du damit alle Dateien vom Typ PNG an PHP übergibst.

Nein, zur Beruhigung: der Counter liegt in einem Unterverzeichnis /images/counter/ (als einzige png-Datei). Und nur dort befindet sich die .htaccess-Datei (und auch keine weiteren Unterverzeichnisse darunter, die diese Anweisung vererben könnten). Das heißt, nur in diesem Verzeichnis wird eine PNG-Datei als PHP interpretiert.

Dort deswegen, weil dieses Unterverzeichnis auch mit robots.txt ausgeschlossen ist und somit zumindest die größeren Suchmaschinen, die sich mehr oder weniger an die robots-Informationen halten, nicht durch Aufruf der PNG-Datei das Ergebnis wesentlich verfälschen (ganz verhindern kann man das sicher nicht, aber eine Suchmaschine ist eher an Dateien mit .php interessiert (selbst wenn diese in einem ausgeschlossenen Verzeichnis liegen) statt an "vermeindlichen" Grafikdateien mit .png. Daher hab ich diese Variante mit counter.png statt mit counter.php gewählt).

Auf der Website läuft PHP 5.5.
Sicher?

Ja, ich war mir sicher :-)

Zumindest beim Aufruf normaler PHP-Dateien, die sich nicht in diesem Unterverzeichnis befanden. Aber...

Ersetze deinen Zählonkel mal durch <?php phpinfo(); ?> und vergleiche die Ausgabe der .png-URL mit jener der .php-URL.

...tja, tatsächlich wird jetzt PHP 4.4.9 ausgegeben. Und von mysqli fehlt dann natürlich jede Spur.

Üblicherweise wird PHP nicht mit AddType eingebunden, sondern mit SetHandler

Also nach vielem Ausprobieren hängt es wohl damit zusammen, dass für .png-Dateien auf jeden Fall die Versionsnummer in der Anweisung angegeben werden muss. Es klappt nun sowohl mit

AddType application/x-httpd-php55 .png

als auch mit

AddHandler application/x-httpd-php55 .png

oder mit dem von dir erwähnten

<FilesMatch .png$>
    SetHandler application/x-httpd-php55
  </FilesMatch>

Doch ohne Angabe der Version hinter dem x-httpd-php wird mit allen drei oben erwähnten Anweisungen immer nur der Interpreter von PHP 4.4.9 für .png-Dateien gestartet (statt 5.5 bei "normalen" .php-Dateien).

Und wenn ich (aus Spaß) das Ganze probiere mit

AddType/AddHandler/Sethandler... application/x-httpd-php5 .png .php

dann wird für .png-Dateien der PHP-Interpreter 5.326 in Gang gesetzt und für .php die Version 5.5.

Da mir das zu unsicher ist, scheint mir die (versionsunabhängige) Variante mit RewriteRule die beste Lösung zu sein.

Trotzdem herzlichen Dank, denn du hast den entscheidenden Tipp gegeben. Schön, dass es dieses Forum immer noch gibt :-)

ciao
h-o