簡體   English   中英

PHP + S3:使用unlink()刪除文件時權限被拒絕

[英]PHP + S3: Permission denied while deleting a file using unlink()

我試圖解決一個非常微不足道的問題,但沒有運氣。

我想在從PHP WebServer上傳文件到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方法沒有釋放文件句柄(僅在大文件的情況下)。 我也嘗試過添加sleep()但不是運氣。

此外,如果我跳過將文件上傳到S3(只是為了測試我的刪除工作流程),該文件將被刪除而沒有任何問題。

請幫忙。!

該問題已在https://github.com/aws/aws-sdk-php/issues/841上提出

嘗試使用gc_collect_cycles()函數,它解決了我的問題。 請參閱上面的頁面以獲得進一步參考

此致,安道爾

也許您需要在php.ini中設置upload_max_filesize和post_max_size的值:

; 上傳文件的最大允許大小。 upload_max_filesize = 40M

; 必須大於或等於upload_max_filesize post_max_size = 40M

修改php.ini文件后,需要重新啟動HTTP服務器才能使用新配置。

如果其他人也堅持這一點,我將nginx服務器部署移動到CentOS,並沒有觀察到這個問題。

waitUntil'ObjectExists'默認具有超時/最大嘗試次數。

你可以改變使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM