Переименование файла на Amazon S3 с помощью rename()

#php

#php

Вопрос:

Как переименовать файл с помощью PHP (в Linux). Я использую rename (старый файл, новый файл), но не работает.

 rename("s3://mydata/$md5_userid/temp_$id.html","s3://mydata/$md5_userid/$iRow_id.html");
  

Комментарии:

1. У вас есть разрешение на переименование файла?

2. Вы уверены, что первый аргумент существует? file_exists($path) == TRUE ?

3. После обновления: s3:// на самом деле это не обычный файл. Я полагаю, вы используете Services_Amazon_S3 ?

4. При создании в Amazon s3 был задан ACL в корзину. Я хочу переименовать файл в корзине.

Ответ №1:

Похоже, вы используете потоковую оболочку для Amazon S3.

Реализация функциональности переименования зависит от отдельного пользовательского кода-оболочки. Если ваша оболочка не выполняет переименование, то либо используемый ею код содержит ошибки, либо он не реализует эту функциональность и либо не сообщает об этом, либо вы не проверяете код возврата из rename вызова функции, и он возвращает false, что означает сбой.

Вероятно, вам действительно потребуется использовать обычный S3 API для выполнения переименования вашего файла. Если функция на самом деле возвращает true, вам следует сообщить об ошибке людям, которые предоставили библиотеку stream wrapper.

Редактировать: Если вы используете PEAR’s Services_Amazon_S3, как предложено в комментариях, то предоставляемая им потоковая оболочка выполняет rename с помощью rename метода, начинающегося примерно со строки 570.

Правка 2: После дальнейшего изучения кода, в случае возникновения сбоев, вы увидите предупреждения, выдаваемые оболочкой stream. Возможно, вы не error_reporting запустили весь путь до -1 ?

Комментарии:

1. Да. я использую stream-оболочку. не могли бы вы, пожалуйста, дать мне код (как переименовать файлы в корзине)

2. @user, я не буду «давать вам код» — вы либо отбрасываете возвращаемое значение, либо иным образом получаете ошибку в вашем собственном rename вызове. Возвращаемое значение true или false? Если он возвращает false, то переименование не удалось на уровне S3. Если он возвращает значение true, то S3 сообщает, что переименование сработало.

3. @Charles предоставленная вами ссылка не работает

4. @tq, исправлено. Досадно, что они не перенаправили свой svn repo viewer в новые канонические расположения файлов на github.