2009-02-23 6 views
1

J'écris un script pour forcer le téléchargement de fichiers mp3 à partir d'un site. Le code fonctionne très bien mais le problème est qu'il ne peut pas télécharger de gros fichiers. Je l'ai essayé avec un fichier de 9.21mb et le télécharger correctement, mais chaque fois que j'essaie d'utiliser le code pour télécharger un fichier de 25mb, il me donne simplement une page de serveur introuvable ou Le site ne peut pas afficher la page. Donc, je sais maintenant qu'il a des problèmes pour télécharger de gros fichiers. Voici l'extrait de code qui permet le téléchargement des fichiers.fichier de téléchargement de problème

header("Pragma: public"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false);    
header("Content-type: application/force-download"); 
header("Content-Disposition: attachment; filename=\"".$dname.".mp3\";"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ".filesize($secretfile)); 
$downloaded=readfile($secretfile); 

L'erreur est affiché: HTTP 500 Erreur serveur interne

merci u beaucoup pour les gars ur de temps.

Répondre

2

Il peut s'agir de limites de mémoire, mais PHP affiche généralement une erreur indiquant que la limite de mémoire a été atteinte.

Aussi, avant tout cela, vous devez désactiver la compression de sortie si elle est activée:

if(ini_get('zlib.output_compression')) { 
    ini_set('zlib.output_compression', 'Off'); 
} 

Parfois IE peut bousiller si la compression de sortie est activée.

+0

merci 4 le conseiller. Je vais désactiver la compression de sortie comme conseillé. en ce qui concerne la chose d'erreur, il peut ne pas avoir affiché une erreur coz i set error_reporting (0). mettra à afficher toutes les erreurs et vous permettra de savoir si je peux. –

+0

modifié le code et désactivé la compression et cela a fonctionné. merci l'homme –

0

Surveillez votre configuration de PHP pour les limites de la mémoire et les délais d'expiration

En php.ini:

memory_limit = 32M 
max_execution_time = 300 

Notez que si vous voulez aller très haut dans le temps d'exécution, vous devez également modifier votre délai d'attente du serveur web .

+0

Merci beaucoup pour votre réponse rapide. Le site est hébergé sur un paquet d'hébergement partagé avec aplus.net Si je suis en mesure de modifier ces paramètres, quel devrait être le bon je devrais le remplacer par. merci –

0

je me donne tout simplement une page de serveur ne peut pas trouver ou le site Web ne peut pas afficher la page

Est-ce l'erreur affiché par Internet Explorer? Avez-vous des erreurs côté serveur? Avez-vous vérifié les journaux de votre serveur?

+0

L'erreur affichée est: HTTP 500 Erreur interne du serveur –

+0

Eh bien alors vérifiez vos journaux du serveur pour voir ce que l'erreur PHP côté serveur s'est produite! –

+0

Oh, assurez-vous de désactiver le paramètre 'Afficher les erreurs HTTP amicales' dans IE! –

0

Essayez ceci:

// empty output buffer 
while (ob_get_level()) { 
    ob_end_clean(); 
} 
if (ini_get('output_buffering')) { 
    ini_get('output_buffering', false); 
} 

// function to encode quoted-string tokens 
function rfc2822_quoteString($string) { 
    return '"'.preg_replace('/[^\x00-\x0C\x0E-\x21\x23-\x5B\x5D-\x7F]/', '\\\$0', $string).'"'; 
} 

// HTTP headers 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.rfc2822_quoteString($dname.'.mp3')); 
header('Content-Length: '.filesize($secretfile)); 

// send file 
readfile($secretfile); 
exit; 
Questions connexes