Maison > développement back-end > Problème PHP > Que faire si le flux binaire php génère des caractères tronqués

Que faire si le flux binaire php génère des caractères tronqués

藏色散人
Libérer: 2023-03-17 07:50:01
original
2036 Les gens l'ont consulté

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

Que faire si le flux binaire php génère des caractères tronqués

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;
?>
Copier après la connexion

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);
}
?>
Copier après la connexion
//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;
?>
Copier après la connexion

À 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(&#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;
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal