php - file_get_contents - le Téléchargement de fichiers avec des espaces dans le nom de fichier ne fonctionne pas
Je suis en train de télécharger des fichiers à l'aide file_get_contents()
fonction.
Toutefois, si l'emplacement du fichier est http://www.example.com/some name.jpg
, la fonction ne parvient pas à télécharger cette.
Mais si l'URL est donnée comme http://www.example.com/some%20name.jpg
, le même est téléchargé.
J'ai essayé rawurlencode()
mais ce convertit tous les caractères dans l'URL et le téléchargement échoue à nouveau.
Quelqu'un peut s'il vous plaît suggérer une solution pour cela?
Ne pas vous le dire
la question c'est est
file_get_contents
?some+name.jpg
devrait fonctionner. Comment fait-il de ne pas télécharger? Erreur 404? 400 bad request? file_put_contents() est pour l'ENREGISTREMENT des données. Si vous fournissez une URL, vous êtes effectivement essayer de faire un téléchargement http, ce qui n'est probablement PAS ce que vous voulez.la question c'est est
rawurlencode
sera le double de coder une chaîne si elle est déjà codé. Cependant, il suffit de décoder toutes les chaînes de caractères avant de les encoder ne ressemble pas à cela marchera. Il a besoin d'une fonction qui va travailler pour toutes les UrlOriginalL'auteur user1064386 | 2011-11-24
Vous devez vous connecter pour publier un commentaire.
Je pense que cela fonctionnera pour vous:
Sortie
Remarque:
Je serais probablement utiliser
urldecode
eturlencode
pour ce que le résultat serait identique pour chaque url.rawurlencode
de préserver la+
même lorsque%20
est probablement adapté pour n'importe quelle url que vous utilisez.OriginalL'auteur maček
Comme vous l'avez probablement déjà compris la fonction urlencode() ne doit être utilisé sur chaque partie de l'URL qui nécessite de s'échapper.
De la les docs pour la fonction urlencode() il suffit de les appliquer à l'image le nom de fichier vous donnant le problème et de laisser le reste de l'URL à lui seul. À partir de votre exemple, vous pouvez encoder le tout en suivant le dernier caractère"/"
OriginalL'auteur Brad
Ici est peut-être une meilleure solution. Si pour une raison quelconque vous utilisez une url relative, comme:
//www.example.com/path
Avant php 5.4.7 ce ne serait pas de créer le [régime] l'élément de tableau qui permettrait de se débarrasser de maček fonction. Cette méthode peut être plus rapide.
$url = '//www.example.com/path';
OriginalL'auteur user3622199
En supposant que le nom de fichier est le problème, c'est une meilleure approche. seulement urlencode la dernière section de l'ie. nom de fichier.
OriginalL'auteur Brandon
Cela devrait fonctionner
$file = 'some%20file%20name'
, ce sera un échec. Il a besoin de quelque chose qui fonctionne pour les deux.Puis, éventuellement,
escapeshellcmd()
fonctionneraOriginalL'auteur Kirill