2012-06-17 14 views
7

Mamy url podobny http://site.s3.amazonaws.com/images/some image @name.jpg wewnątrz $stringurlencode i file_get_contents

Co staram się zrobić (tak, jest tam spacje wokół URL):

$string = urlencode(trim($string)); 
$string_data = file_get_contents($string); 

Co mam (@ jest również zastąpiony):

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%[email protected])[function.file-get-contents]: failed to open stream: No such file or directory

Jeśli kopiuj/wklej http://site.s3.amazonaws.com/images/some image @name.jpg w pasku adresu przeglądarki, obraz będzie op en.

Co jest niedobrego i jak to naprawić?

+2

Więc obróć URL w nieprawidłowym adresie URL, a potem zastanawiać się, że to nie działa? Co to za pytanie? Proszę opracuj. – hakre

+1

A kto powiedział ci, że 'file_get_contents' w PHP lub owijka strumienia HTTP w PHP działa tak dokładnie jak pasek adresu przeglądarki? Przed użyciem tej funkcji w PHP warto najpierw przeczytać specyfikację techniczną. Proponuję zacząć od przeczytania instrukcji. – hakre

+0

Nie mogę tego objąć. Czy możesz dostarczyć nam/nam pełny kod? –

Odpowiedz

1

Podany adres URL jest nieprawidłowy. file_get_contents oczekuje prawidłowego identyfikatora URI http (dokładniej, bazowy plik http robi). Ponieważ Twój nieprawidłowy identyfikator URI nie jest prawidłowym identyfikatorem URI, niepowodzenie to file_get_contents.

Można to naprawić, zmieniając nieprawidłowy identyfikator URI w prawidłowy identyfikator URI. Informacje na temat tworzenia prawidłowego identyfikatora URI są dostępne pod adresem RFC3986. Musisz uważać, aby wszystkie znaki specjalne były reprezentowane poprawnie. na przykład spacje na znaki plus, a znak handlowy na znak musi być zakodowany za pomocą adresu URL. Również zbędne białe znaki na początku i końcu muszą zostać usunięte.

Po zakończeniu webserver poinformuje Cię, że dostęp jest zabroniony. Aby rozwiązać ten problem, może być konieczne dodanie dodatkowych nagłówków żądań za pośrednictwem opcji kontekstowych HTTP dla opakowania pliku HTTP. Informacje zawarte w instrukcji PHP: http:// -- https:// — Accessing HTTP(s) URLs

+0

Przykład roboczy: http://codepad.viper-7.com/jkJjgW – hakre

9

Użycie funkcji urlencode() dla całego adresu URL spowoduje wygenerowanie nieprawidłowego adresu URL. Pozostawienie adresu URL takim, jaki jest, również nie jest poprawne, ponieważ w przeciwieństwie do przeglądarek funkcja file_get_contents() nie wykonuje URL normalization. W przykładzie, trzeba zastąpić spacje z %20:

$string = str_replace(' ', '%20', $string); 
+0

działa, ale to bardzo brudne obejście – s3v3n

+1

wreszcie coś działa, dzięki – nowhere

+0

To jest świetna odpowiedź -: http://stackoverflow.com/questions/8260564/php-file-get-contents-pobieranie-files-with-spaces-in-the-filename-not-work/8260942 # 8260942 –