繁体   English   中英

PHP ZipArchive不会添加超过700个文件

[英]PHP ZipArchive not adding more than 700 files

php_zip.dll的ZipArchive类出现问题。 我通过php.net上建议的ZipArchiveImproved包装器类来使用它,以避免出现最大文件句柄问题。

问题确实很简单:正确添加了700个文件(jpg图像文件),其余文件失败。 addFile方法返回false。

PHP版本是5.2.6。

奇怪的是,这实际上曾经起作用。
可能是什么问题呢? 你能给我些线索吗?

提前非常感谢您!

编辑:对不起,我没有收到任何错误消息(在php.ini中关闭display_errors,我之前没有注意到它)是不正确的。 从701文件开始,我收到以下错误消息:

Warning: ZipArchive::addFile() [ziparchive.addfile]: Invalid or unitialized Zip object in /.../includes/ZipArchiveImproved.class.php on line 104

看起来close()调用返回false,但没有发出错误。 有任何想法吗?

编辑2:相关来源:

include_once DIR_INCLUDES . 'ZipArchiveImproved.class.php';

ini_set('max_execution_time', 0);

$filePath = $_SESSION['fqm_archivePath'];

$zip = new ZipArchiveImproved();
if(! $zip->open($filePath, ZipArchive::CREATE))
{
    echo '<div class="error">Hiba: a célfájl a(z) "' . $filePath . '" útvonalon nem hozható létre.</div>';
    return;
}

echo('Starting (' . count($_POST['files']) . ' files)...<br>');

$addedDirs = array();
foreach($_POST['files'] as $i => $f)
{
    $d = getUserNameByPicPath($f);
    if(! isset($addedDirs[$d]))
    {
        $addedDirs[$d] = true;
        $zip->addEmptyDir($d);

        echo('Added dir "' . $d . '".<br>');
    }

    $addName = $d . '/' . basename($f);
    $r = $zip->addFile($f, $addName);
    if(! $r)
    {
        echo('<font color="Red">[' . ($i + 1) . '] Failed to add file "' . $f . '" as "' . $addName . '".</font><br>');
    }
}

$a = $zip->addFromString('test.txt', 'Moooo');
if($a)
{
    echo 'Added string successfully.<br>';
}
else
{
    echo 'Failed to add string.<br>';
}

$zip->close();

这可能是因为操作系统中打开的文件数量最多(有关更多详细信息,请参见http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ ;它可以通过系统范围内或仅用户限制)。

Zip使所有添加的文件保持打开状态,直到调用Zip :: close。

解决方案是每X个文件关闭并重新打开存档(256或512应该是安全值)。

我通过增加ulimit解决了这个问题: ulimit -n 8192

该问题的描述如下: http : //www.php.net/manual/zh/function.ziparchive-open.php#88765

您是否尝试过指定两个标志?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM