[英]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.