使用php上传大于2M的文件到s3

问题描述 投票:0回答:1

我正在尝试使用 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);
        }

根据:

https://www.php.net/manual/en/wrappers.php.php#:~:text=%20the%20two之间的One%20difference%20,as%20the%20sys_get_temp_dir()%20function.

我需要将aws库中的代码更改为:

    $stream = self::tryFopen("php://temp/maxmemory:$fiveMBs", 'r+');

当我这样做的时候。我确实成功上传了大于2M的文件到s3。

我的问题,我是否必须在 aws 库中进行此更改。或者我应该使用另一个函数?

谢谢

php amazon-web-services amazon-s3
1个回答
0
投票

您无需更改AWS SDK代码。

来自您链接的文档:

php://temp
一旦数据量达到一定量就会使用临时文件 存储达到预定义的限制(默认为 2 MB)。的位置 该临时文件的确定方式与
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
文件以指向不同的位置。

© www.soinside.com 2019 - 2024. All rights reserved.