2010-02-04 84 views
6

我正在编写一个PHP页面,该页面通过刮取现有的HTML页面来生成Podcast Feed。一切都很好,但我的一个mp3文件给出了“filesize():stat failed”错误。尽我所知,该文件没有损坏,而且播放效果非常好。我也重新上传了文件到服务器。它落在所有文件大小的中间范围内,所以我不认为文件太大。因为每个其他文件都会返回一个文件大小,所以我假设问题出在mp3文件上,而不是用我的服务器配置。还有什么我应该检查?PHP文件大小()适用于除一个文件以外的所有文件,因此stat失败错误

这里是我的代码的相关部分:

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

根据要求:(?做人流指出编辑这是我的第一个问题在这里..)

文件名是“12-20- 09_AM_Podcast.mp3" 随后对其他文件的命名约定,所有的文件,有644权限的完整的错误代码是

<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

文件名是否包含任何非ASCII字符或特殊字符()[]?另外,当stat失败时,通常不会有错误代码? – 2010-02-04 22:24:47

+1

由于这是一个简单的函数调用失败,您必须显示实际的文件名(可能还有文件的权限) – 2010-02-04 22:26:53

+1

检查您的Web服务器是否有足够的权限来访问它。 – zneak 2010-02-04 22:27:36

回答

3

出于某种原因,在的Web服务器未返回Content-Length标题字段,这导致filesize()失败。

如果文件存储在本地,则代替filesize()该文件的本地副本。如果没有,则无法解决此问题,因为这是domain.org的Web服务器上的问题。您可以通过在本地下载文件并检查filesize()来解决此问题,但这会大大降低您的页面速度。

如果文件存储在本地,请再次检查文件名或锚点。您可能拼错了一个(或两者),并且Apache mod_speling正在为您解决它。

+1

我实际上正在使用本地文件(所有文件都是本地文件,包括我正在抓取的文件)。 $ fullurl语法仅用于RSS提要。由于其他文件的工作原理,假设它不是服务器问题,我是否正确? – 2010-02-04 23:00:49

+0

正确。看看'file_exists'是否返回true。由于'mod_speling',可能是一个不影响Apache的文件套管问题。 – 2010-02-04 23:05:19

+0

就是这样。原来该文件被命名为“12-20-09_AM_Podacst.mp3”(注意“podcast”中的交换'a'和'c'),但mod_spelling正在修复所有到它的链接。 男人。我一定看过那个文件名100次而没有注意到这一点。谢谢! – 2010-02-05 00:09:35

相关问题