Maison > Article > développement back-end > Que faire si le flux binaire php génère des caractères tronqués
Solution à la sortie tronquée du flux binaire PHP : 1. Ouvrez les fichiers locaux "conn.php" et "print.php" ; 2. Utilisez "ob_clean" pour effacer le contenu de l'en-tête et modifiez le code tel que "mysql_close ();ob_clean(); header("Type de contenu :$type");".
L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 8.1, ordinateur Dell G3.
Que dois-je faire si la sortie du flux binaire de php est tronquée ?
Récemment, j'utilisais PHP pour développer, lire et générer des fichiers binaires à partir de MySQL, et j'ai rencontré un problème avec des caractères tronqués.
Généralement, la méthode suivante est utilisée pour générer des fichiers binaires :
<?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; ?>
Il n'y a aucun problème avec la méthode ci-dessus. Mais si vous encapsulez la connexion à la base de données dans un fichier séparé, des problèmes surviendront. Réécrivez le code ci-dessus en 2 fichiers :
//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; ?>
À ce moment, lors de l'appel de print.php pour ouvrir le fichier Word, des caractères tronqués seront générés. Le problème réside dans l'instruction "require_once('conn.php')". Lorsque PHP appelle cette instruction, elle sera affichée dans l'en-tête, ce qui affecte les deux instructions d'en-tête suivantes, détruisant ainsi le flux de données du fichier Word. Par conséquent, le fichier Word ouvert sera tronqué.
La solution est d'utiliser ob_clean pour effacer le contenu de l'en-tête. Le print.php réécrit est le suivant
//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; ?>
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!