1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZipArchive使用時のclose()エラーを解消「ZipArchive::close(): Failure to create temporary file: Permission denied」

Last updated at Posted at 2024-11-01

概要

LaraveでWebApp作成時、Zip化する際にZipArchiveというライブラリを使ったのですが、
タイトルのエラーで詰まったので原因・対策を記載してます。

ZipArchiveの使用準備

ZipArichiveを使用する際は、phpでzipを扱うライブラリを取り込んでおく必要があります
私の場合は、以下コマンドでphp-zipをインストールしましたが、他ライブラリもあるみたい

sudo yum install php-zip

Zip化ソース

以下のようにzip化のコーディングを行った

同階層の"compress.zip"に対して、"test.csv"をaddする
流れとしてはopen->addFile->closeといった感じ

zip化したファイルがブラウザから取得できるようレスポンスで返した

// インスタンス
$zip = new ZipArchive();

// zipファイルをオープンする
$zipPath = './compress.zip';
$result = $zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE);

if ($result == true) {
    // zipオープン成功時、csvファイルをzipに格納
    $compressFile = 'test.csv';
    $zip->addFile($compressFile);
    $zip->close();
} else {
    // エラーレスポンスを返す
    return response()->json(['error' => 'File not found.'], 404);
}

// 作成したzipをレスポンスで返す
$headers = [
    'Content-Type' => 'application/zip',
    'Content-Disposition' => 'attachment'
];
return response()
    ->download($file, 'test.zip', $headers)
    ->deleteFileAfterSend(true);

エラー発生

この処理をブラウザで実行した際に以下エラーが出た

ZipArchive::close(): Failure to create temporary file: Permission denied

どうやらファイルを作るのに、パーミッションではじかれてるみたい...
ただ不思議なことにzip化処理をphpファイルに書いてサーバー上で実行した場合はうまくいってる

エラー文で調べるもなかなか解決にいたらず、海外のQAを漁ると以下の文章が目に入る

As the error tells you, this is a permission problem. Make sure the apache user (www-data) has the write permission on the directory where the zip archive is.

apache userが書き込み権限を持ってないディレクトリを扱う際、このエラーがおきるらしい
あー、確かにWebサーバのuser権限とか全然いじってない...
phpでうまくいってたのはそういうわけかとやっと納得

というわけで'test.zip'があるディレクトリの権限を変更した
僕の環境の場合apache userはwww-dataでなく、apacheだった

chown -R apache:apache [path-to-test.zip]

ブラウザからのzip化処理も無事成功
ただしwebユーザしか該当ディレクトリが編集できなくなるので注意

まとめ

ブラウザからのZipArchive処理でPermission deniedが出た場合は、対象のディレクトリが
Webサーバのユーザ権限が付与されてるか確認すること

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?