私は見てきましたが、エラーメッセージが表示されますが、この特定の問題は新規のようです。 ZipArchiveライブラリを使用してzipファイルを構築するPHPスクリプトがあります。ファイルは実際には正常に作成されているが、私はclose()
を呼び出すときに、私は一般的に報告ErrorExceptionを得る:ZipArchiveはファイルを作成しますが、ZipArchive :: close()は名前を変更できません
ZipArchive::close(): Renaming temporary file failed: No such file or directory
zipファイルが正常に作成されますが、私はそれを見たときに例外がスローされた後、それはのような拡張子を持っています.zip.a04896
。私が.a04896
を切り取った場合、問題なくファイルを開くことができ、予想されるコンテンツが含まれています。私はファイルがまだ建設中であることを示す何らかの指標だと考えています。私は特にファイル名でzipアーカイブにアクセスしているわけではないので、名前変更の試みを妨げないだろうと思います。
私はWindows 10を実行していますが、このコードはLaravel 5.3アプリケーションの一部です。問題のコードは次のとおりです。
$zip = new \ZipArchive();
$zipFile = config('app.upload_root').'\\downloads\\Interventions_'.$fileTime.".zip";
if ($zip->open($zipFile, \ZipArchive::CREATE)!==TRUE) {
throw new \Exception("cannot open <$zipFile>\n");
}
foreach ($interventions as $row) {
$pdf_name = config('app.upload_root').'\\uploads\\'.$row->UIC.'_'.sprintf("%010d",$row->id).'.pdf';
if(file_exists($pdf_name)){
$result = $zip->addFile($pdf_name, $row->UIC.'_'.sprintf("%010d",$row->id).'.pdf');
if ($result == FALSE){
throw new \Exception($pdf_name.' did not add to ZIP succesfully');
}
}
else{
throw new \Exception($pdf_name.' does not exist');
}
}
file_put_contents ($textFile, $output);
$result = $zip->addFile($textFile, $textFileName);
if ($result == FALSE){
throw new \Exception($testFileName.' did not add to ZIP succesfully');
}
sleep(1);
$zip->close();
何が問題になっているのですか? Windows 10では、ファイルの名前を変更するよりも名前を変更する必要があるのでしょうか?または、その奇妙な拡張子は.zip
の後に問題ですか?
私は 'file_put_contents()'が '\ ZipArchive'を妨害していると思います。 ZIPコンテンツを動的に生成する必要がある場合は、 'ZipArchive :: addFromString()'を試してみてください。 –
file_put_contents()コールはテキストファイルを 'downloads'ディレクトリに保存しています。 保存した後は、zipファイルに個別に追加されます。保存されたテキストファイルはうまく追加されていますので、作成方法がどのように間違っているのかわかりません。 – dspitzle
私の疑念にもかかわらず、私は 'addFromString()'に切り替えようとしましたが、何も変更されませんでした。私はまだすべての内容と同じエラーメッセージと一緒に、拡張子に奇妙な追加サフィックスと有効なzipファイルを取得しています。 – dspitzle