PHP + S3: разрешение отклонено при удалении файла с помощью unlink ()

С тех пор я пытаюсь решить чрезвычайно тривиальный вопрос, но не повезло.

Я хочу удалить файл сразу после его загрузки в AWS S3 с PHP WebServer. Ниже приведены шаги:

//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 ); 

Эти шаги отлично работают, если я загружаю небольшой файл (~ 500 КБ). Однако, если я загружу более крупный файл (5 МБ-10 МБ) , я получаю следующую ошибку :

 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 (просто чтобы проверить рабочий процесс delete), файл будет удален без каких-либо проблем.

Пожалуйста помоги.!

Проблема поднята на https://github.com/aws/aws-sdk-php/issues/841

Попробуйте использовать функцию gc_collect_cycles (), она решила проблему для меня. См. Страницу выше для дополнительной справки.

С уважением, Андор

Возможно, вам нужно установить значение upload_max_filesize и post_max_size в вашем php.ini:

; Максимально допустимый размер для загруженных файлов. upload_max_filesize = 40M

; Должно быть больше или равно upload_max_filesize post_max_size = 40M

После изменения файлов (ов) php.ini вам необходимо перезапустить HTTP-сервер, чтобы использовать новую конфигурацию.

В случае, если кто-то еще застрял на этом, я переместил развертывание сервера nginx в CentOS, и эта проблема не наблюдалась.

У waitUntil 'ObjectExists' есть попытки таймаута / max по умолчанию.

Вы можете изменить, используя:

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