2010-02-04 8 views
6

Estoy escribiendo una página PHP que genera un feed de podcast raspando una página HTML existente. Todo funciona bien, pero uno de mis archivos mp3 da un error "filesize(): stat failed". Lo mejor que puedo decir es que el archivo no está dañado y funciona perfectamente bien. También volví a subir el archivo al servidor. Se encuentra en el rango medio de todos los tamaños de archivo, por lo que no creo que el archivo sea demasiado grande. Debido a que cada otro archivo devuelve un tamaño de archivo, supongo que el problema es con el archivo mp3, no con la configuración de mi servidor. ¿Hay algo más que deba revisar?PHP filesize() funciona en todos los archivos menos uno, da error error stat

Aquí está la parte pertinente de mi código:

$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); 

a lo solicitado: (¿Por qué la gente señalan ediciones Esta es mi primera pregunta aquí ..)

El nombre del archivo es "12-20- 09_AM_Podcast.mp3" , que sigue la convención de nombres de archivo de todos los demás, y todos los archivos tienen permisos de 644. el código de error completo es

<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

¿El nombre del archivo contiene caracteres no ASCII o caracteres especiales() []? Además, cuando falla la estadística, ¿no suele haber un código de error? –

+1

Dado que es una llamada de función simple que falla, debe mostrar el nombre del archivo real (posiblemente también los permisos del archivo) –

+1

Compruebe que su servidor web tenga suficientes privilegios para acceder a él. – zneak

Respuesta

3

Por alguna razón el servidor web en domain.org no devuelve un campo de encabezado Content-Length, lo que está ocasionando que filesize() falle.

Si el archivo se almacena localmente, filesize() la copia local del archivo en su lugar. De lo contrario, no puede solucionar este problema, ya que es un problema en el servidor web domain.org. Puede solucionar el problema descargando el archivo localmente y marcando filesize(), pero esto disminuirá la velocidad de su página.

Si el archivo se almacena localmente, verifique nuevamente su nombre de archivo o su delimitador. Es posible que haya escrito mal uno (o ambos) y Apache mod_speling lo está arreglando para usted.

+1

Actualmente estoy trabajando con el archivo local (todos los archivos son locales, incluido el archivo que estoy raspando). La sintaxis de $ fullurl se acaba de usar para la fuente RSS. Debido a que el resto de los archivos funcionan, ¿estaría en lo cierto al suponer que no sería un problema del servidor? –

+0

Correcto. Ver si 'file_exists' devuelve verdadero. Podría ser un problema de archivo que no afecta a Apache debido a 'mod_speling'. –

+0

Eso es todo. Resulta que el archivo se llamaba "12-20-09_AM_Podacst.mp3" (fíjese en la 'a' y 'c' intercambiadas en "podcast"), pero mod_spelling estaba arreglando todos los enlaces a él. Hombre. Debo haber mirado ese nombre de archivo 100 veces sin darme cuenta. ¡Gracias! –

Cuestiones relacionadas