Urlencode und file_get_contents
Wir haben eine url wie http://site.s3.amazonaws.com/images/some image @name.jpg
innen $string
Was ich versuche zu tun (ja, es gibt ein Leerzeichen auf der ganzen url):
$string = urlencode(trim($string));
$string_data = file_get_contents($string);
Was ich bekomme (@ wird auch ersetzt):
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
Wenn Sie kopieren/einfügen http://site.s3.amazonaws.com/images/some image @name.jpg
in browser-Adresszeile, Bild wird geöffnet.
Was ist schlecht und wie zu beheben?
- So schalten Sie die URL in eine ungültige URL und dann wundert man sich, dass es nicht funktioniert? Was ist das für eine Frage? Bitte erläutern Sie.
- Ich kann nicht umbrochen, mein Kopf herum diese. Liefern Sie mir/uns mit Ihren vollständigen code?
- Dies ist eine tolle Antwort stackoverflow.com/questions/8260564/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die URL, die Sie angegeben haben, ist ungültig.
file_get_contents
erwartet Sie eine gültige http-URI (genauer gesagt, die zugrunde liegenden http-wrapper nicht). Als Ihre ungültige URI ist keine gültige URI,file_get_contents
ausfällt.Können Sie dieses Problem beheben, indem Sie Ihre invalid URI in eine gültige URI. Informationen, wie Sie schreiben, die eine gültige URI ist in RFC3986. Sie müssen darauf achten, dass alle Sonderzeichen richtig dargestellt werden. z.B. Leerzeichen, plus-Zeichen, und das kommerzielle " at " - Zeichen muss URL-kodiert sein. Auch überflüssige Leerzeichen am Anfang und Ende entfernt werden müssen.
Wenn Sie fertig sind, den webserver wird Ihnen sagen, dass der Zugriff verboten ist. Sie dann brauchen könnte, um zusätzliche request-Header über HTTP-Kontext Optionen für den HTTP-Datei-wrapper zu lösen. Sie finden die Informationen in der PHP-manual: http://-- https://— Zugriff auf HTTP(s) - URLs
Mit der Funktion
urlencode()
für die gesamte URL, erzeugt eine ungültige URL. Verlassen Sie die URL, da ist es auch nicht richtig, denn im Gegensatz zu den Browsern, diefile_get_contents()
Funktion nicht ausführen URL Normalisierung. In Ihrem Beispiel, Sie brauchen zum ersetzen von Leerzeichen mit%20
:RAWURLENCODE
?