Php 从zip提取时损坏图像

Php 从zip提取时损坏图像,php,nginx,Php,Nginx,我试图在同一台服务器上使用curl从一个虚拟主机下载一个zip文件到另一个虚拟主机。Zip文件包含*.php和*.jpg文件 问题是:有时JPG文件会损坏,如下所示: 这是我的密码: $out = fopen(ABSPATH.'/templates/default.zip','w+'); $ch = curl_init(); curl_setopt($ch, CURLOPT_FILE, $out); curl_setopt($ch, CURLOPT_HEADER, 0); curl_s

我试图在同一台服务器上使用curl从一个虚拟主机下载一个zip文件到另一个虚拟主机。Zip文件包含*.php和*.jpg文件

问题是:有时JPG文件会损坏,如下所示:

这是我的密码:

$out = fopen(ABSPATH.'/templates/default.zip','w+'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_FILE, $out); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_URL, 'http://share.example.com/templates/default.zip'); 
curl_exec($ch); 
curl_close($ch); 


$zip = new ZipArchive;
if ($zip->open(ABSPATH.'/templates/default.zip') === TRUE) 
{
    if($zip->extractTo(ABSPATH.'/templates'))
    {
        echo 'OK';
    }

    $zip->close();
} 

//$zip->close();
我不明白我的jpg怎么了。我也尝试过使用pclzip.lib.php,但没有成功。如何解决这个问题


提前感谢

您是否尝试过通过curl下载文件并正常解压缩(即不使用php)?以确定下载是导致问题还是解压


您还可以尝试使用shell_exec替换这两个部分中的一个(wget代替curl,unzip代替ZipArchive)。我的意思是只是为了调试,而不是为了生产。

最后我发现了问题所在

我正在使用Nginx web服务器,当我更改Nginx配置文件时:

sendfile on;
变成

sendfile off;

我的形象不再腐败。所以这不是php或curl的问题。有趣的文章:

试图排除显而易见的问题-如果你正常下载并解压文件(即手动,不使用PHP),它能工作吗?我不是这方面的专家,但我知道zip文件可以有不同的算法。可能存在兼容性问题?从您的代码判断,您似乎没有做错任何事情;你看了吗?嗯,不确定bug报告,但我想说的是,没有太多的代码共享来说明它是好的。您应该提供整个示例以及到zip文件的链接,以便能够重现您的问题。您可以控制其他服务器吗?也许你可以用gz代替zip,看看是否会发生同样的问题。这至少可以排除解压错误。