2010-09-29 6 views
0

J'utilise les éléments suivants:question Readfile PHP

@header("Cache-Control: no-cache, must-revalidate"); 
@header("Content-Type: application/octet-stream"); 
@header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
@header("Content-Length: ".$row['file_size']); 
@header("Content-Disposition: attachment; filename=\"".$row['artist'] . " - " .$row['title']."\""); 
@header("Content-type: audio/mpeg;\r\n"); 

pour lancer un téléchargement, maintenant pour une raison de me donner son

Avertissement: readfile (http://theurl.com/ téléchargements/le fichier des espaces.mp3) [function.readfile]: échec de l'ouverture du flux: requête HTTP échouée! HTTP/1.1 404 Not Found dans /home/belgin/public_html/dl.php en ligne

maintenant l'URL est valide, je l'ai vérifié triple, mais pourrait-il être parce qu'il ya des espaces dans la nom de fichier? Et si oui, comment puis-je résoudre ce problème? Merci

ligne reafile:

readfile(http://domain.com/downloads/Warp 1.9_The Bloody Beetroots_320000.mp3) 
+0

Affiche la ligne 'readfile' et nous pouvons vous montrer comment l'éviter. –

+0

ok je l'ai mis à jour –

+1

En dehors de l'urlencode éventuellement() l'URL, votre extrait de code ne contient pas l'URL (une chaîne) entre guillemets ?! – MrWhite

Répondre

3

Je pense que vous allez avoir besoin de urlencode() et html_entities() l'URL ou nom de fichier ou tout

+0

J'espère que c'est quelque chose comme readfile ($ filename), si c'est le cas, changez-le en readfile (html_entities (urlencode ($ filename))); – Ascherer

+0

Il devrait être 'readfile (urlencode ($ filename));', non 'htmlentities()', qui est seulement nécessaire pour échapper les chaînes qui doivent être utilisées dans (X) HTML (dans les balises, les attributs ou pour l'affichage). – Archimedix

+0

maintenant je reçois readfile (http://domain.com/downloads%2FWarp+1.9_The+Bloody+Beetroots_320000.mp3) qui ne fonctionne pas (url invalide et everyhting) –

2

Il semble que l'URL contient des espaces. L'échappez-vous correctement pour l'utiliser dans readfile()?

+0

comment puis-je faire –

+0

Vous pouvez utiliser 'urlencode()'. –

1

NE PAS url encode! Il codera comme http%3A%2F%2Fexample.com%2Fsome%20song.mp3. Vous avez juste besoin de remplacer les espaces. donc à utiliser à la place str_replace ...

readfile(str_replace(" ", "%20", $url));

+0

ou utilisez [urlencode()] (http: //www.php. net/manual/fr/function.urlencode.php) – Julien

0

urlencode() ne sont pas la voie à suivre. Comme mentionné ci-dessus, utilisez simplement str_replace().

Juste une autre possibilité ici de savoir pourquoi cela ne fonctionne pas. C'était la cause pour moi. Il est intéressant de noter que file_exists renvoyait true, mais aucune forme de diffusion du fichier au public ne fonctionnait sans que l'ensemble ci-dessous ne soit correctement défini.

PHP a un paramètre appelé open_basedir

Assurez-vous que ce paramètre est réglé correctement pertinent pour votre environnement d'hébergement. open_basedir peut être modifié via php.ini