php PharData致命错误

时间:2016-05-19 03:27:44

标签: php gzip tar gz

我现在正将aws中的tar.gz文件下载到我的localmachine上。我想解压缩并解压缩以阅读内容。我在使用文件位置创建新的PharData对象时遇到错误:

Fatal error: Uncaught exception 'UnexpectedValueException' with message
'unable to create temporary file for decompression of gzipped phar archive 
"/Applications/XAMPP/xamppfiles/htdocs/NB/admin/temp/ea975d07f1-response.tar.gz"' 
in /Applications/XAMPP/xamppfiles/htdocs/NB/admin/mcAdvanced.php:28 Stack trace: #0 
/Applications/XAMPP/xamppfiles/htdocs/NB/admin/mcAdvanced.php(28): 
PharData->__construct('./temp/ea975d07...') #1 {main} 
thrown in /Applications/XAMPP/xamppfiles/htdocs/NB/admin/mcAdvanced.php on line 28

我的PHP代码是:

file_put_contents("./temp/ea975d07f1-response.tar.gz", fopen($response_body_url, 'r'));
$phar = new PharData('./temp/ea975d07f1-response.tar.gz'); //Error here-line28

我认为权限是正确的。我能够手动解压缩和查看。有人有什么建议吗?

谢谢!

Screenshot of directory/file

3 个答案:

答案 0 :(得分:1)

您的网络服务器需要具有对操作系统$TEMP目录的写入权限才能提取PHAR文件。

使用sys_get_temp_dir查看这是哪个目录,以便您可以应用正确的权限。

或者,您可以指定您的网络服务器已有权访问的其他目录,以用作PHP的临时目录。

答案 1 :(得分:0)

当对超过普通大小的phar归档使用压缩时,这是一个常见问题。该错误源自https://github.com/php/php-src/blob//ext/phar/phar.c#L2552,该错误似乎是由于php_stream_fopen_tmpfile()失败而触发的,而这只是_php_stream_fopen_temporary_file的别名。此呼叫失败的原因尚不清楚。使用sys_get_temp_dir表示温度为/tmp,它确实具有正确的权限(1777)和足够的空间。

此问题的解决方法是不压缩存档。我认为这不是一个很好的答案,但是,这在phar中是一个长期存在的问题,我不会屏住呼吸寻求近期解决方案。

答案 2 :(得分:-1)

什么用户运行Apache进程?使用exec('whoami')进行测试。我想这只是$_SERVER["APP_POOL_ID"]的权限问题。授予读写此身份的权限。