Amazon S3 объект со специальными символами выдает ошибку? - PullRequest
1 голос
/ 25 августа 2011

Я использую https://github.com/tpyo/amazon-s3-php-class для хранения и извлечения объектов. Работает нормально, если объекты содержат нормальное имя без специальных символов. Но если объект содержит символ [] (например, [test] .jpgЯ тестировал только для этого), и если я использую метод getobject, он выдаст ошибку NoSuchakey.

Если я получу URL-адрес S3 и вставлю его в браузер, я могу загрузить изображение.

Но я хочу использовать метод getobject. Так, как избежать этой ошибки. Я не хочу изменять исходное имя объекта.

Редактировать:

Версия PHP5.2.6

1 Ответ

1 голос
/ 25 августа 2011

Я вижу это примечание в комментариях к rawurlencode на php.net:

phpversion ()> = 5.3 будет соответствовать RFC 3986, тогда как phpversion ()<= 5.2.7RC1 не соответствует RFC 3986. </p>

История связанных RFC:

RFC 1738, раздел 2.2, только буквенно-цифровые символы, специальные символы "$ -_. +! * '(), ", и зарезервированные символы, используемые для их зарезервированных целей, могут использоваться без кодирования в URL.

RFC 2396, раздел 2.3, unreserved = alphanum |mark mark = "-" |"_" |""|"!"|"~" |"*" |"'" |"(" | ")"

RFC 2732, раздел 3 (3) Добавьте "[" и "]" к набору "зарезервированных" символов:

RFC 3986, раздел 2.3, не зарезервировано = ALPHA/ DIGIT / "-" / "."/ "_" / "~"

RFC 3987, раздел 2.2, не зарезервировано = ALPHA / DIGIT / "-" / "."/ "_" / "~"

Следующий код выдает тот же результат на 5.3.2 и 5.2.15, хотя:

<? echo rawurlencode ("[hello]") . "\n\n"; ?>
%5Bhello%5D

Можете ли вы попробовать создать копиюS3.php и изменение S3Request для изменения $this->url:

$this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/';
$this->url = str_replace("%5B", "[", $this->url);
$this->url = str_replace("%5D", "]", $this->url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...