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>
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>
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>
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>
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>
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>