我正在尝试使用 aws php 库将视频文件上传到 s3:
https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject
我确实成功上传了小于2M的文件。但当文件大于 2M 时,我收到此警告:
fwrite(): Unable to create temporary file, Check permissions in temporary files directory. in <b>/aws/GuzzleHttp/Psr7/Utils.php</b> on line <b>309</b>
引用 aws 库中这部分代码的警告:
public static function streamFor($resource = '', array $options = [])
{
if (is_scalar($resource)) {
$stream = self::tryFopen('php://temp', 'r+');
if ($resource !== '') {
/////////////here
fwrite($stream, $resource);
fseek($stream, 0);
}
return new Stream($stream, $options);
}
根据:
我需要将aws库中的代码更改为:
$stream = self::tryFopen("php://temp/maxmemory:$fiveMBs", 'r+');
当我这样做的时候。我确实成功上传了大于2M的文件到s3。
我的问题,我是否必须在 aws 库中进行此更改。或者我应该使用另一个函数?
谢谢
您无需更改AWS SDK代码。
来自您链接的文档:
而
一旦数据量达到一定量就会使用临时文件 存储达到预定义的限制(默认为 2 MB)。的位置 该临时文件的确定方式与php://temp
功能。sys_get_temp_dir()
您的错误消息将显示为:
无法创建临时文件,请检查临时文件目录的权限
换句话说,您的脚本已经超出了 2Mb 的内存限制,因此 PHP 现在尝试自动回退到系统临时文件。但是,运行 PHP 进程的用户对 PHP 认为应存储此类文件的目录没有写权限。这是由
sys_temp_dir
文件中的 php.ini
设置定义的,通常是:
sys_temp_dir = "/tmp"
你可以运行
echo sys_get_temp_dir();
来查看 PHP 认为你的临时目录是什么,也许它已经从默认值更改了。然后调整该目录的系统权限(以便 PHP 用户可以在那里写入)或更改您的 php.ini
文件以指向不同的位置。