Php 文件\u将\u内容放在二进制数据上无法正常工作

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

我正在尝试读取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_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_解码不是解决方案。看看我的新答案,可能会有帮助。