Ich suche nach einer Möglichkeit zu bestätigen, ob X-Sendfile Anfragen, die von einem Skript (PHP) an den Webserver zurückgegeben werden, ordnungsgemäß verarbeitet. Bilder werden korrekt bereitgestellt, aber ich dachte, ich würde den Header in Curl-Anfragen sehen.
$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Wed, 04 Jan 2012 17:19:45 GMT
Server: Cherokee/1.2.100 (Arch Linux)
ETag: "4dd2e306=9da0"
Last-Modified: Tue, 17 May 2011 21:05:10 GMT
Content-Type: image/jpeg
Content-Length: 40352
X-Powered-By: PHP/5.3.8
Content-Disposition: inline; filename="amos-lee-feature.jpg"
Aufbau
Cherokee 1.2.100 mit PHP-FPM 5.3.8 in FastCGI:
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
(Set by vServer > Behavior > Extensions php > Handler: Allow X-Sendfile [check Enabled])
WordPress-Netzwerk / WPMU 3.3.1:
define('WPMU_SENDFILE',true);
ist in eingestellt wp-config.php
das folgende kurz davor wp-settings.php
ist enthalten. Dies löst den folgenden Code aus, der ausgeführt werden soll wp-includes/ms-files.php:50 von WP stellt Dateien für einen bestimmten Blog bereit:
header( 'X-Sendfile: ' . $file );
exit;
Ich habe bestätigt, dass das obige Snippet ausgeführt wird, indem ich einen zusätzlichen Header für die Disposition direkt vor dem hinzugefügt habe exit();
Anruf. Diese Content-Disposition ist bei den curl-Ergebnissen oben und nicht ursprünglich im ms-files.php-Code vorhanden. Der hinzugefügte Code lautet:
header('Content-Disposition: inline; filename="'.basename($file).'"');
Forschung
Ich habe:
- php-fpm / cherokee-Daemons neu gestartet, nachdem Konfigurationsänderungen vorgenommen wurden.
- Versuchte mehrere Tricks in den Kommentaren drüben bei php.net/readfile und ersetzte den einfachen Header in
ms-files.php
mit vollständigerem Code aus Beispielen.- php.net/manual/en/function.readfile.php
- www.jasny.net/articles/how-i-php-x-sendfile/
- *codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/*
- Bestätigt [cherokee support][5] und getestet [with and without][6] Komprimierung, obwohl ich nicht glaube, dass dies zutreffen würde, da meine Bilder korrekt bereitgestellt werden. Ich habe auch ein verdächtig ähnliches Problem in einem lighttpd-Beitrag gefunden.
- *cherokee-project.com/doc/other_goodies.html*
- code.google.com/p/cherokee/issues/detail?id=1228
- webdevrefinery.com/forums/topic/4761-x-sendfile/
- Hier auf SO wurde ein Klappentext gefunden, der darauf hindeuten kann, dass der Header entfernt wird
- stackoverflow.com/questions/7296642/django-understanding-x-sendfile
- Getestet, dass die obigen Header von curl, wget, Firefox, Chrome und web-sniffer.net konsistent sind.
- Habe herausgefunden, dass ich aufgrund mangelnder Reputation noch nicht mehr als 2 Links posten kann.
Fragen
- Werden
X-Sendfile
in den Headern vorhanden sein, wenn es richtig funktioniert, oder wird es entfernt? - Können die Zugriffsprotokolle verwendet werden, um festzustellen, ob
X-Sendfile
funktioniert?
Ich suche hier nach allgemeinen Tipps oder Informationen zur Fehlerbehebung, die nicht unbedingt spezifisch für PHP / Cherokee sind.
Aktualisieren
Ich habe einen geeigneten Weg gefunden, X-Sendfile oder X-Accel-Redirect in einer Test- oder Sandbox-Umgebung zu bestätigen: Deaktiviere X-Sendfile und überprüfe die Header.
Wenn Allow X-Sendfile in Cherokee deaktiviert ist:
$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Fri, 06 Jan 2012 15:34:49 GMT
Server: Cherokee/1.2.101 (Ubuntu)
X-Powered-By: PHP/5.3.6-13ubuntu3.3
Content-Type: image/jpeg
X-Sendfile: /srv/http/wordpress/wp-content/blogs.dir/2/files/2011/05/amos-lee-feature.jpg
Content-Length: 40352
Das Bild wird in Browsern nicht geladen, aber Sie können sehen, dass der Header vorhanden ist. Nach dem erneuten Aktivieren von X-Sendfile zulassen wird das Bild geladen und Sie können sicher sein, dass X-Sendfile funktioniert.