我现在正将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
我认为权限是正确的。我能够手动解压缩和查看。有人有什么建议吗?
谢谢!
答案 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"]
的权限问题。授予读写此身份的权限。