2010-02-04 23 views
6

Tôi đang viết một trang PHP tạo nguồn cấp dữ liệu podcast bằng cách cào một trang HTML hiện có. Mọi thứ đều hoạt động tốt, nhưng một trong những tệp mp3 của tôi có lỗi "filesize(): stat failed". Tốt nhất là tôi có thể nói, tệp không bị hỏng và nó phát hoàn toàn tốt. Tôi cũng đã tải lại tệp lên máy chủ. Nó nằm trong phạm vi trung bình của tất cả các kích thước tệp, vì vậy tôi không nghĩ rằng tệp quá lớn. Bởi vì mỗi tập tin khác trả về một kích thước tập tin, tôi giả định vấn đề là với tập tin mp3, không phải với cấu hình máy chủ của tôi. Có điều gì khác mà tôi nên kiểm tra không?PHP filesize() hoạt động trên tất cả trừ một tệp, cung cấp cho lỗi stat không thành công

Dưới đây là phần có liên quan của mã của tôi:

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

Theo yêu cầu: (? Làm người chỉ ra chỉnh sửa Đây là câu hỏi đầu tiên của tôi ở đây ..)

Các tên tập tin là "12-20- 09_AM_Podcast.mp3" mà theo quy ước đặt tên của tất cả các tập tin khác, và tất cả các file có quyền của 644. các mã lỗi đầy đủ là

<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

Tên tệp có chứa bất kỳ ký tự không phải ASCII hoặc ký tự đặc biệt nào() [] không? Plus, khi stat thất bại, không phải là thường có một mã lỗi? –

+1

Thấy đây là lỗi gọi hàm đơn giản, bạn phải hiển thị tên tệp thực tế (có thể cả quyền trên tệp) –

+1

Kiểm tra xem máy chủ web của bạn có đủ đặc quyền để truy cập hay không. – zneak

Trả lời

3

Đối với một số lý do các máy chủ web trên domain.org không trả về trường tiêu đề Content-Length, gây ra filesize() không thành công.

Nếu tệp được lưu trữ cục bộ, thay vào đó, filesize() bản sao cục bộ của tệp. Nếu không, bạn không thể khắc phục sự cố này vì đây là sự cố trên máy chủ web của domain.org. Bạn có thể giải quyết vấn đề bằng cách tải xuống tệp cục bộ và kiểm tra filesize() sau đó, nhưng điều này sẽ làm chậm trang của bạn một cách chủ yếu.

Nếu tệp được lưu trữ cục bộ, hãy kiểm tra lại tên tệp hoặc thanh toán của bạn. Bạn có thể đã viết sai chính tả một (hoặc cả hai) và Apache mod_speling đang sửa lỗi đó cho bạn.

+1

Tôi thực sự đang làm việc với các tập tin địa phương (tất cả các tập tin được địa phương, bao gồm cả các tập tin mà tôi đang cạo). Cú pháp $ fullurl chỉ được sử dụng cho nguồn cấp dữ liệu RSS. Bởi vì phần còn lại của các tập tin làm việc, tôi sẽ được chính xác trong giả định rằng nó sẽ không phải là một vấn đề máy chủ? –

+0

Chính xác. Xem nếu 'file_exists' trả về true. Có thể là một vấn đề vỏ tập tin mà không ảnh hưởng đến Apache vì 'mod_speling'. –

+0

Vậy đó. Hóa ra tập tin được đặt tên là "12-20-09_AM_Podacst.mp3" (lưu ý "a" và "c" hoán đổi trong "podcast"), nhưng mod_spelling đã sửa tất cả các liên kết đến nó. Man. Tôi phải xem tên tập tin đó 100 lần mà không nhận ra điều đó. Cảm ơn! –

Các vấn đề liên quan