web-dev-qa-db-ja.com

ZipArchive :: close():AWS EC2 Linuxで一時ファイルを作成できない

laravel 5.2)でcronジョブに取り組んでいますが、スケジュールからコントローラー関数を呼び出してExcelシートを作成しようとすると、エラーが発生しますが、postmanで正常に実行されます。

ZipArchive::close(): Failure to create temporary: No such file or directory' in /var/www/html/Expenses/vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007.php:398

ZipArchiveの一時ファイルの権限に問題がありますか?

Phpexcelシートをディレクトリ(777)に保存しているときに上記のエラーが発生します。

$Excel_path = 'SubmittedSheets/'.$userId.'-'.uniqid().'.xlsx';
$objWriter->save($Excel_path);
8
151291

AWS Ec2 Linux for PHPExcelでExcelファイルを保存するには、絶対パスが必要です。

$Excel_path = '/var/www/html/MyProject/public/SubmittedSheets/'.$userId.'-'.uniqid().'.xlsx';
$objWriter->save($Excel_path); 
5
151291

Mac OSシステムで行をコメント解除するだけで解決しました

;sys_temp_dir = "/tmp"

php.ini、つまり次のように変更します

sys_temp_dir = "/tmp"

一時ファイルを配置するディレクトリ。デフォルトはシステムのデフォルトです(sys_get_temp_dirを参照)

ただし、デフォルトとして使用しようとしたディレクトリがわからない。おそらく/var/tmp、私のHomebrew PHPインストールには書き込み権限がないようです。

3
Magnus W

私は多くのことを試し、多くの時間を費やしました。 Ubuntu + Vesta + Nginx + Apacheのソリューションはファイルにありました:

:/home/admin/conf/web/your-domain.com.Apache2.ssl.conf

私の例のようにtmpフォルダを設定します:

<Directory /home/admin/web/your-domain.com/public_html>
    AllowOverride All
    SSLRequireSSL
    Options +Includes -Indexes +ExecCGI
    php_admin_value open_basedir 
    /home/admin/web/your-domain.com/public_html:/tmp
    php_admin_value upload_tmp_dir /tmp
    php_admin_value session.save_path /tmp
</Directory>

サンプル画像

apacheサービスを再起動することを忘れないでください