【发布时间】:2019-10-10 15:23:26
【问题描述】:
在我的 Laravel 脚本中,我将文本写入使用 tmpfile() 创建的文件,然后尝试返回文件下载响应,以便用户下载该文件。
$file = tmpfile();
fwrite($file, 'Write some text to the file.');
return Response::download(stream_get_meta_data($file)['uri'], 'myFile.txt');
结果是AccessDeniedException 说:
The file /tmp/phpJfvGtH could not be accessed
如果我不使用 Laravel 的 Response 类强制文件下载响应,它可以正常工作:
header('Content-disposition: attachment; filename=myFile.txt');
header('Content-type: text/plain');
readfile(stream_get_meta_data($file)['uri']);
为什么这行得通,但使用Response::download() 方法却不行?
我正在使用Laravel Framework version 4.2.16
【问题讨论】:
-
在您的退货声明之前,
var_export(is_readable(stream_get_meta_data($file)['uri']));显示什么? -
它返回
true。由于is_readable($path)返回false,文件/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesser.php抛出异常,这似乎与var_export(is_readable(stream_get_meta_data($file)['uri']));返回true 相矛盾。我很困惑。 -
我是这么认为的。这就是我询问 is_readable 的原因。
$splFile = new Symfony\Component\HttpFoundation\File\File((string)stream_get_meta_data($file)['uri'])); var_export($splFile->isReadable()); var_export(is_readable($splFile->getPathname())); var_export(posix_getuid()); var_export(posix_geteuid());怎么样