2011-08-25 3 views
1

저장을 위해 https://github.com/tpyo/amazon-s3-php-class을 사용하고 있습니다. 개체에 특수 문자가없는 일반 이름이 포함되어 있으면 올바르게 작동합니다. 그러나 개체에 [] 문자가 포함되어있는 경우 (예 :이 경우에만 테스트 한 .jpg) 그리고 getobject 메소드를 사용하면 NoSuchakey 오류가 발생합니다.특수 문자가있는 Amazon S3 객체에서 오류가 발생합니까?

S3 URL을 직접 가져 와서 브라우저에 붙여 넣으면 이미지를 다운로드 할 수 있습니다.

하지만 getobject 메서드를 사용하고 싶습니다. 어떻게이 오류를 피할 수 있습니까? 원래 개체 이름을 변경하고 싶지 않습니다.

편집 :

PHP 버전 내가 php.net에 rawurlencode에 대한 의견이 주를 참조 5.2.6

+0

당신이 [URL 인코딩]을 적용 잊었 (http://php.net/manual/en/function.urlencode.php)? –

+0

$ rest = 새로운 S3Request ('GET', $ bucket, $ uri) 여기서 URL 인코딩을 적용해야합니까? – svk

+0

nvm, 그것은'rawurlencode ($ uri)'로 이미 당신을 위해 그것을 수행합니다 –

답변

1

:

phpversion()> = 5.3을 준수합니다 RFC 3986, phpversion() < = 5.2.7RC1은 RFC 3986을 준수하지 않습니다.

기록 o F 관련 RFC : ".! $ -_ * '() +"

RFC 영숫자 1738 2.2 절, 특수 문자 , 그리고 자신의 예약 목적으로 사용 예약 된 문자는 URL 내에서 인코딩되지 않은 사용할 수있다.

RFC 2396 섹션 2.3 unreserved = alphanum | 마크 마크 = "-" | "_"| "." | "!" | "~"| "*"| " '"| "("| ")"

RFC 2732 섹션 3 (3) 추가 "["와 "]" 문자 '예약'의 세트 :

RFC 3986 2.3 절 자유석 = ALPHA/DIGIT/"-"/ "."/"_"/ "~"

RFC 3987 섹션 2.2 unreserved = 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); 
+0

스티브 - 0. 감사합니다. 그리고 또한 내 PHP 버전은 5.2.6입니다. – svk