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

藏色散人
Freigeben: 2023-03-17 07:50:01
Original
2004 Leute haben es durchsucht

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;
?>
Nach dem Login kopieren

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);
}
?>
Nach dem Login kopieren
//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;
?>
Nach dem Login kopieren

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;
?>
Nach dem Login kopieren

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!

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