前提・実現したいこと
以下のエラーについてどのようにすれば解消できるでしょうか。
また、zipフォルダーを解凍できるように修正したいです。
よろしくお願いいたします。
- 仕様 -
現在、ボタンを押下したら
zipファイルがサーバ上で作成されてダウンロードさせる
システムを作っています。
zipファイルには適当なテキストファイルを作って突っ込んでいます。
- 環境 -
Wordpressにてphpコードを埋め込んで実行させています。
phpのモジュールとしてzipは有効状態です。(=ZipArchiveは使用可能)
- 現象 -
$zip->close()
にて、「 発生している問題・エラーメッセージ」が発生しています。
また、その問題を無視してzipファイルをダウンロードすると
「圧縮フォルダー ....は無効です。」と出て解凍できません。
⇒ 契機不明でエラーは出なくなりました。
ただし、winSCPで直接保存されたzipファイルをダウンロードして
開くと解凍できますが、PHPのheaderを使ってフロントから
ダウンロードした場合は依然、「圧縮フォルダー ....は無効です。」と出て解凍できません。
発生している問題・エラーメッセージ
Warning: ZipArchive::close(): Failure to create temporary file: No such file or directory in /home/c1221591/public_html/testtesttest342.com/wp-content/plugins/insert-php-code-snippet/shortcode-handler.php(65) : eval()'d code on line 35
該当のソースコード
PHP
1<?php 2if(isset($_POST['add'])) { 3 $zip = new ZipArchive(); 4 // ZIPファイルをオープン 5 //パスやファイル名の設定 6 $zip_name = 'create_zip_'.date('Ymd').'.zip'; 7 $zip_tmp_path = dirname(__FILE__).'/tmp_zip/'; 8 9 $res = $zip->open($zip_tmp_path.$zip_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 10 11 // zipファイルのオープンに成功した場合 12 if ($res === true) { 13 // 圧縮するファイルを指定する 14 // 作成するファイル名の指定 15 $file_name = dirname(__FILE__).'/file.txt'; 16 17 // ファイルの存在確認 18 if( !file_exists($file_name) ){ 19 // ファイル作成 20 touch( $file_name ); 21 } 22 23 // ファイルのパーティションの変更 24 chmod( $file_name, 0777 ); 25 echo('Info - ファイル作成完了。 file name:['.$file_name.']'); 26 27 if(file_exists($file_name)) { 28 if ($zip->addFile($file_name, 'test.txt') != true) { 29 exit; 30 } 31 } 32 33 // ZIPファイルをクローズ 34 // !!!!!ここで警告がでてしまう!!!!! 35 if ($zip->close() != true) { 36 exit; 37 } 38 39 //ダウンロード 40 header('Content-Type: application/octet-stream'); 41 header('Content-Type: application/force-download;'); 42 header('Content-Length: '.filesize($zip_tmp_path.$zip_name)); 43 header('Content-Disposition: attachment; filename="'.$zip_name.'"'); 44 ob_end_clean(); 45 readfile($zip_tmp_path.$zip_name); 46 } 47 else { 48 echo "失敗したので終了"; 49 } 50} 51?>