Heim > Artikel > Backend-Entwicklung > Was tun, wenn der PHP-Binärstream verstümmelte Zeichen ausgibt?
Lösung für die verstümmelte Ausgabe des PHP-Binärstreams: 1. Öffnen Sie die lokalen Dateien „conn.php“ und „print.php“. 2. Löschen Sie den Header-Inhalt mit „ob_clean“ und ändern Sie den Code, z. B. „mysql_close“. ();ob_clean(); header("Content-type:$type");".
Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 8.1, Dell G3-Computer.
Was soll ich tun, wenn die Binärstream-Ausgabe von PHP verstümmelt ist?
Vor kurzem habe ich PHP zum Entwickeln, Lesen und Ausgeben von Binärdateien aus MySQL verwendet und bin auf ein Problem mit verstümmeltem Code gestoßen.
Im Allgemeinen wird die folgende Methode zur Ausgabe von Binärdateien verwendet:
<?php if(!isset($id) or $id=="") die("error: id none"); //定位记录,读出 $conn=mysql_connect("127.0.0.1","***","***"); if(!$conn) die("error : mysql connect failed"); mysql_select_db("test",$conn); $sql = "select * from receive where id=$id"; $result = mysql_query($sql); $num=mysql_num_rows($result); if($num<1) die("error: no this recorder"); $data = mysql_result($result,0,"file_data"); $type = mysql_result($result,0,"file_type"); $name = mysql_result($result,0,"file_name"); mysql_close($conn); //先输出相应的文件头,并且恢复原来的文件名 header("Content-type:$type"); header("Content-Disposition: attachment; filename=$name"); echo $data; ?>
Mit der oben genannten Methode gibt es kein Problem. Wenn Sie die Datenbankverbindung jedoch in einer separaten Datei kapseln, treten Probleme auf. Schreiben Sie den obigen Code in zwei Dateien um:
//conn.php <?php function Open_DB(){ $conn=mysql_connect("127.0.0.1","***","***"); if(!$conn) die("error : mysql connect failed"); mysql_select_db("test",$conn); } ?>
//print.php <?php if(!isset($id) or $id=="") die("error: id none"); //定位记录,读出 require_once('conn.php'); Open_DB(); $sql = "select * from receive where id=$id"; $result = mysql_query($sql); $num=mysql_num_rows($result); if($num<1) die("error: no this recorder"); $data = mysql_result($result,0,"file_data"); $type = mysql_result($result,0,"file_type"); $name = mysql_result($result,0,"file_name"); mysql_close(); header("Content-type:$type"); header("Content-Disposition: attachment; filename=$name"); echo $data; ?>
Zu diesem Zeitpunkt werden beim Aufruf von print.php zum Öffnen der Word-Datei verstümmelte Zeichen generiert. Das Problem liegt in der Anweisung „require_once('conn.php')“. Wenn PHP diese Anweisung aufruft, wird sie im Header ausgegeben, was sich auf die folgenden beiden Header-Anweisungen auswirkt und dadurch den Datenfluss der Word-Datei zerstört. Daher wird die geöffnete Word-Datei verstümmelt.
Die Lösung besteht darin, ob_clean zu verwenden, um den Header-Inhalt zu löschen. Die neu geschriebene print.php lautet wie folgt
//print.php <?php if(!isset($id) or $id=="") die("error: id none"); //定位记录,读出 require_once('conn.php'); Open_DB(); $sql = "select * from receive where id=$id"; $result = mysql_query($sql); $num=mysql_num_rows($result); if($num<1) die("error: no this recorder"); $data = mysql_result($result,0,"file_data"); $type = mysql_result($result,0,"file_type"); $name = mysql_result($result,0,"file_name"); mysql_close(); ob_clean(); header("Content-type:$type"); header("Content-Disposition: attachment; filename=$name"); echo $data; ?>
Empfehlen Sie das Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas tun, wenn der PHP-Binärstream verstümmelte Zeichen ausgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!