Heim > Backend-Entwicklung > PHP-Tutorial > Linux – Fehler beim Herunterladen von PHP-Bildern

Linux – Fehler beim Herunterladen von PHP-Bildern

WBOY
Freigeben: 2016-08-04 09:21:53
Original
1166 Leute haben es durchsucht

1 Wenn der Benutzer auf der Website auf den Link zum Herunterladen des QR-Codes klickt, ruft der Server den von WeChat generierten QR-Code ab und lädt ihn auf den Computer des Benutzers herunter
Die gleiche Codetestmaschine hat kein Problem, das Online-Bild jedoch nicht geöffnet werden,
Der Code lautet wie folgt

<code>
    public function download(){
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxx";
        $tmp = file_get_contents($url);
        $file_name = "weixin.jpg";
       // 输入文件标签
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: ".strlen($tmp));
        Header("Content-Disposition: attachment; filename=" . $file_name);
        // 输出文件内容
        echo $tmp;
        exit();
  }</code>
Nach dem Login kopieren
Nach dem Login kopieren

Grundsätzlich wurde festgestellt, dass es durch unterschiedliche Umgebungen verursacht wird.
Gibt es irgendwelche Anforderungen an die Serverkonfiguration oder installierte Software für diese Codezeilen zum Herunterladen von Bildern?


Mit demselben Code können die heruntergeladenen Bilder auf dem Testcomputer geöffnet werden, nicht jedoch auf dem Online-Computer

---------------------Trennlinie------------------------
Nach der Überprüfung wurde festgestellt, dass die Ausgabe anderer Klassen, auf die online verwiesen wird, Leerzeilen enthält (möglicherweise handelt es sich um den BOM-Header oder das Schlusszeichen des PHP-Codes?>) und dass danach eine Leerzeile steht it), was zu einer Ausgabe vor der Kopfzeile führt und das Bild nicht gedruckt werden kann. Ja, es sind zu viele Dateien vorhanden und es ist wirklich schwierig, sie zu finden.
Nach dem Hinzufügen des folgenden Codes ist das Problem gelöst.

<code>//清除之前的输出,确保图片完整。
        ob_start();
        ob_end_flush();
        ob_end_clean();</code>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

1 Wenn der Benutzer auf der Website auf den Link zum Herunterladen des QR-Codes klickt, ruft der Server den von WeChat generierten QR-Code ab und lädt ihn auf den Computer des Benutzers herunter
Die gleiche Codetestmaschine hat kein Problem, das Online-Bild jedoch nicht geöffnet werden,
Der Code lautet wie folgt

<code>
    public function download(){
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxx";
        $tmp = file_get_contents($url);
        $file_name = "weixin.jpg";
       // 输入文件标签
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: ".strlen($tmp));
        Header("Content-Disposition: attachment; filename=" . $file_name);
        // 输出文件内容
        echo $tmp;
        exit();
  }</code>
Nach dem Login kopieren
Nach dem Login kopieren

Grundsätzlich wurde festgestellt, dass es durch unterschiedliche Umgebungen verursacht wird.
Gibt es irgendwelche Anforderungen an die Serverkonfiguration oder installierte Software für diese Codezeilen zum Herunterladen von Bildern?


Mit demselben Code können die heruntergeladenen Bilder auf dem Testcomputer geöffnet werden, nicht jedoch auf dem Online-Computer

---------------------Trennlinie------------------------
Nach der Überprüfung wurde festgestellt, dass die Ausgabe anderer Klassen, auf die online verwiesen wird, Leerzeilen enthält (möglicherweise handelt es sich um den BOM-Header oder das Schlusszeichen des PHP-Codes?>) und dass danach eine Leerzeile steht it), was zu einer Ausgabe vor der Kopfzeile führt und das Bild nicht gedruckt werden kann. Ja, es sind zu viele Dateien vorhanden und es ist wirklich schwierig, sie zu finden.
Nach dem Hinzufügen des folgenden Codes ist das Problem gelöst.

<code>//清除之前的输出,确保图片完整。
        ob_start();
        ob_end_flush();
        ob_end_clean();</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ich bin auf dieses Problem gestoßen. Ich denke, der Fehler liegt in file_get_contents. Ihre URL ist https und file_get_contents bleibt beim Abrufen hängen. Versuchen Sie es mit Curl anstelle von file_get_contents, was das Problem lösen sollte.
(Es gibt zwei SSL-Einstellungen in Curl, die dem Programm den normalen Zugriff auf https ermöglichen. Das sollte übrigens jeder wissen)

<code>   Header("Accept-Length: ".strlen($tmp));  不定义这个试试</code>
Nach dem Login kopieren

strlen
Wenn ein 0 auftritt, wird davon ausgegangen, dass das Ende der Zeichenfolge erreicht wurde, und 0 wird möglicherweise in der Mitte des Bildes angezeigt, sodass nur ein Teil der Daten angezeigt wird des Bildes erhalten, und es kann natürlich nicht geöffnet werden.
Zum Beispiel

<code>$hex='3332310033323131313131313131313131313131313131313131313131313131313131313131313131'
//结果是321,即0后面的都无效。</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage