2012-06-17 22 views
7

Abbiamo un URL del tipo http://site.s3.amazonaws.com/images/some image @name.jpg all'interno $stringurlencode e file_get_contents

Quello che sto cercando di fare (sì, c'è uno spazio bianco intorno alla url):

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

quello che ottengo (@ è anche sostituito):

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

se si copia/incolla http://site.s3.amazonaws.com/images/some image @name.jpg nella barra degli indirizzi del browser, l'immagine sarà op it.

Cosa c'è di male e come risolverlo?

+2

Così si trasforma l'URL in un URL non valido e quindi ti chiedi che non funzioni? Cos'è questo per una domanda? Si prega di elaborare. – hakre

+1

E chi ti ha detto che 'file_get_contents' in PHP o il wrapper http stream in PHP funziona esattamente come la barra degli indirizzi del tuo browser? Potresti voler leggere le specifiche tecniche prima di usare quella caratteristica in PHP. Ti suggerisco di iniziare leggendo il manuale. – hakre

+0

Non riesco a capirlo. Potete fornirmi/noi con il vostro codice completo? –

risposta

1

L'URL specificato non è valido. file_get_contents prevede un URI http valido (più precisamente, il wrapper http sottostante lo fa). Poiché l'URI non valido non è un URI valido, file_get_contents non riesce.

È possibile risolvere questo problema trasformando l'URI non valido in un URI valido. Informazioni su come scrivere un URI valido sono disponibili in RFC3986. È necessario assicurarsi che tutti i caratteri speciali siano rappresentati correttamente. per esempio. spazi per i segni più, e il segno commerciale al segno deve essere codificato URL. Anche gli spazi bianchi superflui all'inizio e alla fine devono essere rimossi.

Al termine, il server Web ti dirà che l'accesso è vietato. Potrebbe quindi essere necessario aggiungere intestazioni di richieste aggiuntive tramite le opzioni di contesto HTTP per il wrapper di file HTTP per risolverlo. Trovate le informazioni nel manuale PHP: http:// -- https:// — Accessing HTTP(s) URLs

+0

Esempio di lavoro: http://codepad.viper-7.com/jkJjgW – hakre

9

Utilizzando la funzione urlencode() per l'intero URL, verrà generato un URL non valido. Anche lasciare l'URL come è, non è corretto, perché in contrasto con i browser, la funzione file_get_contents() non esegue URL normalization. Nell'esempio, è necessario sostituire gli spazi con %20:

+0

funziona, ma è una soluzione molto sporca – s3v3n

+1

finalmente qualcosa funziona, grazie – nowhere

+0

Questa è un'ottima risposta: http://stackoverflow.com/questions/8260564/php-file-get-contents-download-files-with-spaces-in-the-filename-not-work/8260942 # 8260942 –