PHP + S3:在删除使用断开链接文件权限被拒绝()(PHP + S3: Permission d

2019-10-23 10:41发布

我试图解决一个极其微不足道的问题,因为长,但没有运气。

我想删除一个文件从一个PHP Web服务器上传到AWS S3之后。 以下是具体步骤:

//Upload file to S3 using PHP SDK's S3Client::putObject method:
$result = $s3_client->putObject( array(
                'Bucket' => AWS_BUCKET_NAME,
                'Key'    => $file_name,
                'SourceFile' => $file_path,
                'Metadata'   => array(
                    'metadata_field' => 'metadata_value'
                )
            ));

//Poll the object until it is accessible
$s3_client->waitUntil('ObjectExists', array(
    'Bucket' => AWS_BUCKET_NAME,
    'Key'    => $file_name
));

//Delete the file
unlink( $file_path );

这些步骤的情况下,完美地工作,我上传一个小文件(〜500KB)。 但是, 如果我上传一个更大的文件(5MB-10MB),我收到以下错误

Warning: unlink(<Complete Path to File>): Permission denied in <Complete path to uploader.php> on line N

我的工作在Windows和试图对目录和文件提升用户权限。 (用chmod,CHOWN PHP命令,并确保该目录是可写的和可访问)

看来,AWS S3 PutObject方法不释放文件句柄(在只有大文件的情况下)。 我也尝试添加睡眠(),但没有运气!

此外,如果我跳过上传文件到S3(只是为了测试我的工作流程删除),该文件被没有任何问题删除。

请帮忙。!

Answer 1:

该问题已经引起了上https://github.com/aws/aws-sdk-php/issues/841

尝试使用gc_collect_cycles()函数,它解决了这个问题对我来说。 见上面进一步参考页。

问候,安道尔



Answer 2:

也许你需要设置你的php.ini的upload_max_filesize和post_max_size要的价值:

; 允许的最大尺寸为上传文件。 的upload_max_filesize = 40M

; 必须大于或等于的upload_max_filesize的post_max_size = 40M

修改php.ini文件(一个或多个)后,需要重新启动HTTP服务器以使用新的配置。



Answer 3:

如果其他人也停留在此,我感动的nginx服务器部署到CentOS的,没有观察到这个问题。



Answer 4:

在最好推迟到“ObjectExists”有默认的超时/最大尝试。

您可以更改使用:

$s3Client->waitUntil('ObjectExists', array(
    'Bucket' => AWS_BUCKET_NAME,
    'Key'    => $file_name,
    'waiter.interval'     => 10,
    'waiter.max_attempts' => 6
));


文章来源: PHP + S3: Permission denied while deleting a file using unlink()