6

これが機能しない理由を説明するのに完全に途方に暮れています。ヘルプ!

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if ($res === 'TRUE') {
    $unzip_success= $zip->extractTo('/temp/', "inscriptions.txt")

    $zip->close();
}
  • ターゲットディレクトリ「temp」は「0777」権限です
  • $ resから取得したコードは「11」であり、PHP.netのドキュメントで要求されている「TRUE」ではありません。
  • 注:$archiveの完全なURLとextractToの最初の引数を入力する必要があります
4

8 に答える 8

5

何も機能しない場合は、サーバーがLinuxであるかどうかを確認してください。Linuxの場合は、unzipコマンドを実行して、phpのsystem/exec関数を使用してファイルを解凍できます。すなわち

system("unzip archive.zip");

特定のファイルを抽出するには、manドキュメントで解凍を確認できます。サーバーパラメータが原因で何度もzipライブラリが期待どおりに機能しない場合は、Linuxコマンドに切り替えます。

于 2012-07-09T20:01:38.613 に答える
2

問題は、引用符で囲まれていることですTRUE。これはキーワードであり、一重引用符なしで残す必要があります。さらに、 locateNameを使用して抽出する前に、ファイルがzipアーカイブに存在するかどうかを確認できます。

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if ($res === true && $zip->locateName('inscriptions.txt') !== false) {
    $unzip_success= $zip->extractTo('/tmp/', "inscriptions.txt");

    $zip->close();
}
于 2012-07-09T19:42:38.280 に答える
2

ZipArcive::extractToでは大文字と小文字が区別されます。抽出するファイルの名前がzip形式の名前と正確に一致しない場合、メソッドはfalseを返します。

于 2014-06-18T20:20:11.997 に答える
2

私は同じ問題に直面しました、私はこれを修正しました: $_SERVER['DOCUMENT_ROOT'])urlに使用してください。私のコード(codeigniter):

$this->load->library('unzip');
$file = $this->input->GET('file');
$this->unzip->extract($_SERVER['DOCUMENT_ROOT'].'/TRAS/application/uploads/' .    $file,$_SERVER['DOCUMENT_ROOT'].'/TRAS/application/views/templates/' . $file);
于 2014-10-05T06:23:58.383 に答える
1

$resが11に等しい場合、それZipArchiveは指定されたファイルを開くことができないことを意味します。

これをテストするには:

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if($res == ZipArchive::ER_OPEN){
    echo "Unable to open $archive\n";
}
于 2012-07-09T19:49:43.410 に答える
1

ドキュメントルートを追加することも私にとってはうまくいきました。これが私のコードです

$zip = new ZipArchive;
        if ($zip->open($_SERVER['DOCUMENT_ROOT'].'/'.$folder.$file_path) === TRUE) {
            $zip->extractTo($_SERVER['DOCUMENT_ROOT'].'/$folder');
            $zip->close();
            echo 'ok';
        }
于 2016-08-11T06:10:42.427 に答える
1

同じ問題が発生しますが、zipファイルを開くことができますtrue。開いた後に戻ります。

私の問題は、後にfalseになったということ$zip->extractTo()です。

zipファイルでCHINESE(NO-ENGILISH)という名前のファイルを削除した後、ようやく成功しました。

于 2016-12-19T07:46:38.240 に答える
-1

私はWindows10でも同じ問題を抱えていました。私が見つけた唯一の解決策は、open()が成功したとしても、extractToを2回試すことでした。

$zip = new ZipArchive;
if ($open === true) {
    $result = $zip->extractTo($destination);
    if ($result === false) {
        $result = $zip->extractTo($destination);
    }
    $zip->close();
}

2番目のextractTo()が(介入アクションなしで)機能するという事実は、アーカイブまたは宛先ディレクトリーに問題がないことを示しているように思われます。

于 2018-08-12T14:45:16.197 に答える