敏感肌、アトピーの方にも安心な無添加化粧品 【無添加工房OKADA】ファンサイト

閉じる

肌年齢が若くなる!?【厳選された植物原料100%】納得の無添加 化粧水 

みんなの投稿一覧を見る イベント内容を詳しく見る

ZipArchiveでZipファイルの生成に失敗する場合の対処法

肌年齢が若くなる!?【厳選された植物原料100%】納得の無添加 化粧水 
問題
ZipArchiveを使用してzipファイルを作成し、ダウンロードさせるWebページを作成していたが、

アカウントによってダウンロードできていない人がいた
コード


// Zipフォルダにコピーするファイル
$files = array("./a.txt","./b.txt","./c.txt");

// Zip作成用一時フォルダを作る
$tmp = ".\\tmp";
if(!file_exists($tmp))
if (!mkdir($tmp, 0777, true)){
echo "{$tmp}の作成に失敗しました\n";
exit();
}

// zipフォルダを作る
$zipfile = "{$tmp}\\zip1.zip");

// すでにファイルがある場合削除
if(file_exists($zipfile))
unlink ($zipfile);

// Zipを作成
$zip = new ZipArchive;
if ($zip->open($zipfile, ZipArchive::CREATE) === FALSE) {
echo "zipの作成に失敗しました\n";
exit();
}

// ファイルをコピーする
foreach($files as $file){
if($zip->addFile("{$file}",basename($file)) === FALSE){
echo "{$file}のコピーに失敗しました\n";
$zip->close();
exit();
}
}

$zip->close();

// ダウンロードさせる
header('Content-Type: application/force-download');
header('Content-Length: '.filesize($zipfile));
header('Content-disposition: attachment; filename="'.basename($zipfile).'"');

// readfile()だと大容量のときに時間がかかりすぎるので分割する

// out of memoryエラーが出る場合に出力バッファリングを無効
while (ob_get_level() > 0) {
ob_end_clean();
}
ob_start();

// ファイル出力
if ($file = fopen($zipfile, 'rb')) {
while(!feof($file) and (connection_status() == 0)) {
echo fread($file, '4096'); //指定したバイト数ずつ出力
ob_flush();
}
ob_flush();
fclose($file);
}
ob_end_clean();

// 一時ファイルを削除する
unlink ($zipfile);



期待する動作

ダウンロードボタンがクリックされたらzipの生成を開始
zipの生成が完了したらダウンロード

現象

PHPのエラーログには


[09-Jan-2018 09:59:35 Asia/Seoul] PHP Warning: fopen(zip1.zip): failed to open stream: No such file or directory in 該当ページ.php on line * *


zipを作成する一時フォルダには、zip1.zip.a06572といった、zipになりきれなかったファイルが残っている

ファイルサイズはあるため、ファイルのコピーは成功しているっぽい

zip->close()に失敗している?

ただし、zip->close()の戻り値を見てみても、trueを返してきている





原因

zipを生成する一時フォルダに、現象発生ユーザーの”変更”の権限がついていなかった

ファイルの作成、コピーは「書き込み」の権限でできるが、zip->close()は「変更」の権限が必要?
権限がなくclose()に失敗している場合でもTrueが返ってきてしまうらしい



解決策

該当ユーザーに、「書き込み」・「読み込み」だけでなく、「変更」 の権限も付ける


ついでにzip->close()にもエラー処理を追加




ZipArchive自体はエラーになっていないので、上記で正しくエラーログが出力できるかはわかりません(´⊙ω⊙`)

くろさわ   2018-01-14 10:13:40 提供:無添加工房OKADA

企業紹介

無添加工房OKADA

「無添加工房OKADA」では、本当の無添加化粧品だけを作っています。

最初は肌の弱い家族のために、自宅で作った石けんがきっかけでした。
家族が安心して使えるものを徹底的にこだわって作ったら、本当にいいものができました。

同じように困っている人たちにも喜んでもらいたい。 そのために作り続けています。  
敏感肌、アトピーの方など、肌の弱い皆さんにも喜んでもらえれば幸いです。


「無添加化粧品」とされているものにも、実は薬品など添加物が入っている商品が、数多くあることをご存知でしょうか?

部分的な無添加や、キャリーオーバー等によって隠れた添加物が残留していても、残念ながら「無添加化粧品」として販売されているのが現状です。

■「無添加」と「納得無添加」の違い おわかりになりますか?
https://www.mutenka-okada.com/column/soap/soap_1/#item_base


開催中イベント

美容・美白・コスメ のイベント(商品モニター募集・無料サンプル・試供品情報)を探す