7

既存のHTMLページをスクレイピングしてポッドキャストフィードを生成するPHPページを作成しています。すべてがうまく機能しますが、私のmp3ファイルの1つで「filesize():statfailed」エラーが発生します。私が知る限り、ファイルは破損しておらず、完全に正常に再生されます。また、ファイルをサーバーに再アップロードしました。すべてのファイルサイズの中間の範囲にあるので、ファイルが大きすぎるとは思いません。他のすべてのファイルはファイルサイズを返すため、問題はサーバー構成ではなく、mp3ファイルにあると想定しています。他に確認すべきことはありますか?

これが私のコードの関連部分です:

$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 />
4

1 に答える 1

4

何らかの理由で、上のWebサーバーがヘッダーフィールドをdomain.org返さないため、失敗します。Content-Lengthfilesize()

ファイルがローカルに保存されている場合は、filesize()代わりにファイルのローカルコピー。domain.orgそうでない場合は、のWebサーバーの問題であるため、この問題を修正することはできません。ファイルをローカルにダウンロードして確認することで問題を回避できますfilesize()が、これによりページの速度が大幅に低下します。

ファイルがローカルに保存されている場合は、ファイル名またはアンカーをもう一度確認してください。片方(または両方)のスペルを間違えた可能性があり、Apachemod_spelingが修正しています。

于 2010-02-04T22:34:21.087 に答える