Php 文件\u将\u内容放在二进制数据上无法正常工作
我正在尝试读取zip文件并使其正常工作。现在我想获取zip文件的内容(图像)。但是图像被扭曲。下面是我的代码片段:Php 文件\u将\u内容放在二进制数据上无法正常工作,php,image,zipfile,Php,Image,Zipfile,我正在尝试读取zip文件并使其正常工作。现在我想获取zip文件的内容(图像)。但是图像被扭曲。下面是我的代码片段: while ($zip_entry = zip_read($zip)) { echo "<p>"; echo "Name: " . zip_entry_name($zip_entry) . "<br />"; if (zip_entry_open($zip, $zip_entry)) $contents = zip_entr
while ($zip_entry = zip_read($zip))
{
echo "<p>";
echo "Name: " . zip_entry_name($zip_entry) . "<br />";
if (zip_entry_open($zip, $zip_entry))
$contents = zip_entry_read($zip_entry);
$name=zip_entry_name($zip_entry);
file_put_contents('uphoto/'.$i.'.jpg',$contents);
}
while($zip\u entry=zip\u read($zip))
{
回声“”;
echo“Name:”.zip_entry_Name($zip_entry)。“
”;
如果(zip_entry_open($zip,$zip_entry))
$contents=zip\u entry\u read($zip\u entry);
$name=zip\u entry\u name($zip\u entry);
文件内容('uphoto/'.$i..jpg',$contents);
}
当您在图像数据中插入时,它将不起作用。您不能仅通过回显网页内容在网页上显示图像。例如,您应该对其进行base64编码,并将其放入img标记中。然后,您可以执行以下操作:
echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
echo'
';
当您在图像数据中插入时,它将不起作用。您不能仅通过回显网页内容在网页上显示图像。例如,您应该对其进行base64编码,并将其放入img标记中。然后,您可以执行以下操作:
echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
echo'
';
base64\u解码能起作用吗?未测试:
$i = 0;
while ($zip_entry = zip_read($zip))
{
echo "<p>";
echo "Name: " . zip_entry_name($zip_entry) . "<br />";
if (zip_entry_open($zip, $zip_entry))
$contents = base64_decode(zip_entry_read($zip_entry));
$name=zip_entry_name($zip_entry);
$filename = 'uphoto/'.$i++.'.jpg';
file_put_contents($filename,$contents);
echo '<img src="' . $filename . '">';
}
$i=0;
而($zip\u entry=zip\u read($zip))
{
回声“”;
echo“Name:”.zip_entry_Name($zip_entry)。“
”;
如果(zip_entry_open($zip,$zip_entry))
$contents=base64_解码(zip_条目_读取($zip_条目));
$name=zip\u entry\u name($zip\u entry);
$filename='uphoto/'。$i++..jpg';
文件内容($filename,$contents);
回声';
}
base64\u解码能起作用吗?未测试:
$i = 0;
while ($zip_entry = zip_read($zip))
{
echo "<p>";
echo "Name: " . zip_entry_name($zip_entry) . "<br />";
if (zip_entry_open($zip, $zip_entry))
$contents = base64_decode(zip_entry_read($zip_entry));
$name=zip_entry_name($zip_entry);
$filename = 'uphoto/'.$i++.'.jpg';
file_put_contents($filename,$contents);
echo '<img src="' . $filename . '">';
}
$i=0;
而($zip\u entry=zip\u read($zip))
{
回声“”;
echo“Name:”.zip_entry_Name($zip_entry)。“
”;
如果(zip_entry_open($zip,$zip_entry))
$contents=base64_解码(zip_条目_读取($zip_条目));
$name=zip\u entry\u name($zip\u entry);
$filename='uphoto/'。$i++..jpg';
文件内容($filename,$contents);
回声';
}
您可以尝试创建新图像:
$i = 0;
while ($zip_entry = zip_read($zip))
{
$content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$image = imagecreatefromstring($content);
$filename = 'uphoto/'.$i++.'.jpg';
imagejpeg($image, $filename);
imagedestroy($image);
echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
}
$i=0;
而($zip\u entry=zip\u read($zip))
{
$content=zip_entry_read($zip_entry,zip_entry_filesize($zip_entry));
$image=imagecreatefromstring($content);
$filename='uphoto/'。$i++..jpg';
imagejpeg($image,$filename);
图像销毁($图像);
回声“
”;
}
我使用zip_entry_filesize()定义了使其正常工作所需的内容大小。您可以尝试创建一个新图像:
$i = 0;
while ($zip_entry = zip_read($zip))
{
$content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$image = imagecreatefromstring($content);
$filename = 'uphoto/'.$i++.'.jpg';
imagejpeg($image, $filename);
imagedestroy($image);
echo '<img src="data:image/jpeg;base64,' . base64_encode($content) . '"><br />';
}
$i=0;
而($zip\u entry=zip\u read($zip))
{
$content=zip_entry_read($zip_entry,zip_entry_filesize($zip_entry));
$image=imagecreatefromstring($content);
$filename='uphoto/'。$i++..jpg';
imagejpeg($image,$filename);
图像销毁($图像);
回声“
”;
}
我使用zip_entry_filesize()定义了使其正常工作所需的内容大小。您确定:
echo“$contents
”代码>?回显“$contents
”;没有必要。我只是输入代码来检查它是否有效。我会在常规文本编辑器中打开生成的.jpg
文件,以验证某些内容是否不属于那里。我如何知道某些内容是否应该在那里?@lvaroG.vicario可能您的zip文件从未打开过,因为无论内容是否存在,您都要写入文件。您能否发布$contents变量中写入的内容。您确定:echo“$contents
”代码>?回显“$contents
”;没有必要。我只是输入代码来检查它是否有效。我会在常规文本编辑器中打开生成的.jpg
文件,以验证某些内容是否不属于那里。我如何知道某些内容是否应该在那里?@lvaroG.vicario可能您的zip文件从未打开过,因为无论内容是否存在,您都要写入文件。请发布$contents变量中写入的内容。请参阅上一行中的文件\u put\u contents()
。这就是OP的问题所在。您可以忽略这行echo“$contents
;”;。我正在尝试使用以下代码文件“put”contents(“uphoto/”.$i..jpg',$contents”)将图像保存在名为uphoto的文件夹中;当我写这个答案时,echo“$contents
”只是用于测试的注释并没有被写出来。您可以忽略此答案。请参阅上一行中的文件\u put\u contents()
。这就是OP的问题所在。您可以忽略这行echo“$contents
;”;。我正在尝试使用以下代码文件“put”contents(“uphoto/”.$i..jpg',$contents”)将图像保存在名为uphoto的文件夹中;当我写这个答案时,echo“$contents
”只是用于测试的注释并没有被写出来。你可以忽略这个答案。Base64_解码不是解决方案。请参阅我的新答案,这可能会有所帮助。Base64_解码不是解决方案。看看我的新答案,可能会有帮助。