2010-02-04 16 views
6

J'écris une page PHP qui génère un flux de podcast en raclant une page HTML existante. Tout fonctionne très bien, mais un de mes fichiers mp3 donne une erreur "filesize(): stat a échoué". Autant que je peux dire, le fichier n'est pas corrompu, et il joue parfaitement bien. J'ai également ré-uploadé le fichier sur le serveur. Il se situe dans la moyenne de toutes les tailles de fichiers, donc je ne pense pas que le fichier soit trop grand. Parce que tous les autres fichiers renvoie une taille de fichier, je suppose que le problème est avec le fichier mp3, pas avec la configuration de mon serveur. Y a-t-il autre chose que je devrais vérifier?PHP filesize() fonctionne sur tous les fichiers sauf un, donne stat erreur échouée

est ici la partie pertinente de mon code:

$i = 1; //skipping header row on table 
do { 
    $tr = $table->find('tr', $i); 

    $date = $tr->find('div', 0)->plaintext; 
    $datetime = new DateTime($date); 
    $speaker = $tr->find('div', 1)->plaintext; 
    $title = $tr->find('div', 2)->plaintext; 
    $url = $tr->find('div', 3)->find('a', 0)->href; 
    $fullurl = "http://domain.org/resources/".$url; 
    $filesize = filesize($url); //<---works on every file except one 

    echo "<item><title>".$title."</title>\n"; 
    echo "<description>".$title." - ".$datetime->format('D, M jS, Y')." - ".$speaker."</description>\n"; 
    echo "<itunes:author>".$speaker."</itunes:author>\n"; 
    echo "<enclosure url=\"".$fullurl."\" length=\"".$filesize."\" type=\"audio/mpeg\"/>\n"; 
    echo "<guid isPermaLink=\"true\">".$fullurl."</guid>\n"; 
    echo "<pubDate>".$datetime->format('r')."</pubDate>\n"; 
    echo "<itunes:explicit>clean</itunes:explicit></item>\n\n"; 

    $i++; 
}while ($table->find('tr', $i) != NULL); 

Comme demandé: (les gens signalent les modifications Ceci est ma première question ici ..)

Le nom de fichier est « 12-20- 09_AM_Podcast.mp3" qui suit la convention de nommage de tous les fichiers et tous les fichiers ont des autorisations de 644. le plein code d'erreur est

<b>Warning</b>: filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for audio/12-20-09_AM_Podcast.mp3 in <b>/homepages/1/d106955786/htdocs/victory/resources/podcast1.php</b> on line <b>45</b><br /> 
+0

Le nom de fichier contient-il des caractères non-ASCII ou des caractères spéciaux() []? De plus, quand stat échoue, n'y a-t-il pas habituellement un code d'erreur? –

+1

Étant donné qu'il s'agit d'une simple fonction d'appel en cas d'échec, vous devez afficher le nom de fichier réel (éventuellement les permissions sur le fichier) –

+1

Vérifiez que votre serveur Web dispose de privilèges suffisants pour y accéder. – zneak

Répondre

3

Pour une raison quelconque le serveur Web sur domain.org ne retourne pas un champ d'en-tête Content-Length, ce qui provoque l'échec de filesize().

Si le fichier est stocké localement, filesize() à la place la copie locale du fichier. Sinon, vous ne pouvez pas résoudre ce problème car il s'agit d'un problème sur le serveur Web de domain.org. Vous pouvez contourner le problème en téléchargeant le fichier localement et en vérifiant filesize() alors, mais cela ralentira votre page majorly.

Si le fichier est stocké localement, vérifiez à nouveau votre nom de fichier ou votre ancre. Vous avez peut-être mal orthographié un (ou les deux) et Apache mod_speling le corrige pour vous.

+1

Je travaille actuellement avec le fichier local (tous les fichiers sont locaux, y compris le fichier que je raccroche). La syntaxe $ fullurl est juste utilisée pour le flux RSS. Parce que le reste des fichiers fonctionne, aurais-je raison de supposer que ce ne serait pas un problème de serveur? –

+0

Correct. Voyez si 'file_exists' retourne vrai. Peut-être un problème de boîtier qui n'affecte pas Apache à cause de 'mod_speling'. –

+0

C'est tout. Il s'avère que le fichier a été nommé "12-20-09_AM_Podacst.mp3" (notez le swap 'a' et 'c' dans "podcast"), mais mod_spelling corrigeait tous les liens. Man. J'ai dû regarder 100 fois ce nom de fichier sans le remarquer. Merci! –