0

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();
4

3 に答える 3

1

これはおそらく、OSで開いているファイルの最大数が原因です(詳細については、http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/を参照してください。システム全体またはユーザー制限のみ)。

Zipは、Zip :: closeが呼び出されるまで、追加されたすべてのファイルを開いたままにします。

解決策は、すべてのXファイルのアーカイブを閉じて再度開くことです(256または512が安全な値である必要があります)。

于 2011-12-09T09:45:47.963 に答える
0

問題はここで説明されています: http://www.php.net/manual/en/function.ziparchive-open.php#88765

両方のフラグを指定しようとしましたか?

于 2010-08-09T13:30:20.863 に答える
-1

ulimit: を増やすことでこの問題を解決しましたulimit -n 8192

于 2013-06-14T13:32:53.220 に答える