このコードを作成して、Zipファイルを作成して保存しました。しかし、どういうわけか、エラーは表示されませんが、Zipファイルも作成されません。コードは次のとおりです。
$Zip = new ZipArchive;
$time = microtime(true);
$res = $Zip->open("maps/zips/test_" . $time . ".Zip", ZipArchive::CREATE);
if ($res === TRUE) {
echo "RESULT TRUE...";
$Zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
$Zip->addFromString('how_to_install.txt', 'Some Explanation...');
$Zip->close();
$Zip_created = true;
echo "FILE ADDED!";
}
何が間違っているのですか、どうすれば修正できますか?
おそらく、Apacheまたはphpには、そのディレクトリにZipアーカイブを作成する権限がありません。 ZipArchice :: open :に関するコメントの1つから
書き込んだり保存したりするディレクトリに正しい権限が設定されていない場合、エラーメッセージは表示されず、すべてが正常に機能しているように見えます...変更されていないことを除いて!
代わりに、ZipArchive :: close()の戻り値を必ず収集してください。それが間違っている場合...それは機能しませんでした。
Ifステートメントにelse句を追加し、$ resをダンプして結果を確認します。
if($res === TRUE) {
...
} else {
var_dump($res);
}
Zipでエラーが発生しない場合が2つあります。
Zip->close
が呼び出されると、アーカイブは失敗し、Zipファイルは作成されません。$ Zip-> addFileを呼び出す前に、各ファイルが存在することを確認してください。存在しない場合、Zipは生成されず、エラーメッセージは表示されません。
if(file_exists($fichier->url))
{
if($Zip->addFile($fichier->url,$fichier->nom))
{
$erreur_ouverture = false;
}
else
{
$erreur_ouverture = true;
echo 'Open error : '.$fichier->url;
}
}
else
{
echo 'File '.$fichier->url.' not found';
}
完全な書き込み/読み取り権限がある場合でも、まったく同じ問題が発生しました。
ZipArchiveに渡す前に手動で「.Zip」ファイルを作成することで解決しました。
$Zip = new ZipArchive;
$time = microtime(true);
$path = "maps/zips/test_" . $time . ".Zip"
touch($path); //<--- this line creates the file
$res = $Zip->open($path, ZipArchive::CREATE);
if ($res === TRUE) {
echo "RESULT TRUE...";
$Zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
$Zip->addFromString('how_to_install.txt', 'Some Explanation...');
$Zip->close();
$Zip_created = true;
echo "FILE ADDED!";
}
それをステップに分割します。
if ($res === TRUE) {
check if file_exist
check if addFile give any error
}
if($Zip->close())
{
$Zip_created = true;
echo "FILE ADDED!"
}
Zipのphpinfoが有効になっているかどうかを確認してください:)