0

過去 1 時間、ファイルの解凍方法を検索、追加、失敗してきました。PHPを使用して定期的にzipをダウンロードしています。zip の内容を zips というフォルダーに抽出する必要がありますが、実際には問題ではありません (同じディレクトリではないだけです)。違いがあれば、スペースと帯域幅が無制限の共有ホスティングを使用しています。

私がダウンロードする zip は、内部に 5 つの zip を含む 1 つの zip であり、これらの 5 つの zip のそれぞれに 1 つの csv があります。各csvを読み取り、情報をデータベースに保存する必要があります。データベースのコードは既にありますが、zipファイルを開くことができません。

次のコードを試しましたが、どちらもうまくいきませんでした。また、php.netで解凍機能を試しましたが、運もありませんでした。

助言がありますか?

$local_file = '_08222012_213000.zip';
$zip = zip_open($local_file);
if (is_resource($zip)) {
  while ($zip_entry = zip_read($zip)) {
    $fp = fopen(zip_entry_name($zip_entry), "w");
    if (zip_entry_open($zip, $zip_entry, "r")) {
      $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
      fwrite($fp,"$buf");
      zip_entry_close($zip_entry);
      fclose($fp);
    }
  }
  zip_close($zip);
}

これも機能しませんでした:

$zip = new ZipArchive;
$res = $zip->open($local_file);
if ($res === TRUE) {
    $zip->extractTo('zips/');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
}

編集:将来誰かが問題を抱えた場合に、このコードが機能するようにしました。

//Change directory
chdir("zips/");
exec("unzip ./$local_file");
4

1 に答える 1

1

PHP インストールに zip サポートがインストールされていないようです。Windows を使用している場合、PHP には DLL が付属している必要があり (私の記憶では)、対応する extensions= 行を見つけて PHP.ini ファイルで有効にする必要があります。

Linux を使用している場合、ディストリビューションによっては、パッケージ マネージャーからその拡張機能をインストールできます。または、次のようにします。

sudo pecl install zip

インストール方法の詳細については、http://www.php.net/manual/en/zip.installation.php を参照してください

私が持っている他の提案は、ファイルのアクセス許可が、PHP プロセス (通常は Web サーバー プロセスとして実行される) がファイルにアクセスできるようなものであることを確認することです。また、パスが public_html ディレクトリ内の Web サーバー (IE) にアクセスできることを確認してください (共有ホスティングでは、PHP を webroot ディレクトリに chroot することがベスト プラクティスと見なされます)。

于 2012-08-31T15:25:22.283 に答える