Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn der PHP-Binärstream verstümmelte Zeichen ausgibt?

Was tun, wenn der PHP-Binärstream verstümmelte Zeichen ausgibt?

藏色散人
藏色散人Original
2022-10-21 09:37:142007Durchsuche

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");".

Was tun, wenn der PHP-Binärstream verstümmelte Zeichen ausgibt?

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(&#39;conn.php&#39;);
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(&#39;conn.php&#39;);
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!

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