Tôi cần kiểm tra xem một tệp cụ thể có tồn tại trên máy chủ từ xa hay không. Sử dụng is_file()
và file_exists()
không hoạt động. Bất kỳ ý tưởng làm thế nào để làm điều này một cách nhanh chóng và dễ dàng?Cách kiểm tra xem tệp có tồn tại từ url
Trả lời
bạn phải sử dụng CURL
function is_url_exist($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($code == 200){
$status = true;
}else{
$status = false;
}
curl_close($ch);
return $status;
}
nó hoạt động tốt, bạn có một dòng typo 1 functon nên được chức năng –
Bạn không cần CURL cho rằng ... cách quá nhiều chi phí ... kiểm tra câu trả lời của tôi dưới đây (sử dụng get_headers của PHP cho việc này!) – patrick
giống như những người khác, không kiểm tra xem đó có phải là tệp hay không, chỉ cần kiểm tra URL. 'echo is_url_exists ('http://stackoverflow.com')? 'Có': 'Không'; 'lặp lại 'Có'. –
Thực hiện yêu cầu với curl và xem nó có trả lại mã trạng thái 404 hay không. Thực hiện yêu cầu bằng cách sử dụng phương thức yêu cầu HEAD để nó chỉ trả về các tiêu đề mà không có phần thân.
Tôi vừa tìm thấy giải pháp này:
if(@getimagesize($remoteImageURL)){
//image exists!
}else{
//image does not exist.
}
Nguồn: http://www.dreamincode.net/forums/topic/11197-checking-if-file-exists-on-remote-server/
Ý của bạn là 'getimagesize'? Như ở đây: http://uk1.php.net/getimagesize nếu như vậy thì các tài liệu nói nó có thể tham khảo các tệp cục bộ hoặc từ xa. – Todd
Có, đã sửa. Cảm ơn! –
getimagesize là quá nhiều chi phí. Nếu bạn chỉ muốn biết nếu một tập tin tồn tại sử dụng get_header của PHP (kiểm tra câu trả lời của tôi) – patrick
Bạn không cần CURL cho rằng ... Quá nhiều chi phí cho chỉ muốn kiểm tra xem tệp có tồn tại hay không ...
Sử dụng PHP's get_header.
$headers=get_headers($url);
Sau đó kiểm tra nếu $ result [0] chứa 200 OK (có nghĩa là các tập tin là có)
Một chức năng để kiểm tra xem một công trình URL có thể là thế này:
function UR_exists($url){
$headers=get_headers($url);
return stripos($headers[0],"200 OK")?true:false;
}
/* You can test a URL like this (sample) */
if(UR_exists("http://www.amazingjokes.com/"))
echo "This page exists";
else
echo "This page does not exist";
' Theo mặc định get_headers sử dụng yêu cầu GET để tìm nạp tiêu đề' - thay vì chi phí của một yêu cầu curl (không thực sự chắc chắn những gì trên đang được gọi bởi đó) - có một yêu cầu GET lãng phí mà giọt cơ thể - thay vì sử dụng một yêu cầu HEAD và chỉ nhận được các tiêu đề. – AD7six
@ AD7six: Tôi giả sử thiết lập cURL trong bộ nhớ sẽ gây quá tải, tôi đã thực hiện một số thử nghiệm so sánh hai phương pháp và bạn nói đúng: nếu bạn có thư viện cURL được tải nhanh hơn sử dụng phương thức được chấp nhận so với get_headers. Tôi so sánh tất cả 3 phương pháp được đề cập: cURL là nhanh nhất, sau đó get_headers, sau đó getimagesize với getimagesize nhược điểm thêm sẽ chỉ cho bạn biết nếu một hình ảnh tồn tại. Đó là những gì được hỏi, do đó, nó vẫn là một câu trả lời hợp lệ ở đây, nhưng nó không phải là rất linh hoạt. – patrick
@ ad7six bạn có chắc get_headers đang yêu cầu nội dung không? fyi, bạn có thể ghi đè yêu cầu GET qua ngữ cảnh luồng: stream_context_set_default (['http' => ['method' => 'HEAD']]); $ headers = get_headers ('http://example.com'); – Tobias
Hi theo thử nghiệm của chúng tôi giữa 2 máy chủ khác nhau, kết quả như sau:
sử dụng curl để kiểm tra 10 tệp .png (mỗi khoảng 5 mb) trung bình 5,7 giây. sử dụng kiểm tra tiêu đề cho cùng một điều mất trung bình 7,8 giây!
Vì vậy, trong curl thử nghiệm của chúng tôi nhanh hơn nhiều nếu bạn phải kiểm tra tệp lớn hơn!
chức năng curl của chúng tôi là:
function remote_file_exists($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpCode == 200){return true;}
return false;
}
đây là tiêu đề mẫu kiểm tra của chúng tôi:
function UR_exists($url){
$headers=get_headers($url);
return stripos($headers[0],"200 OK")?true:false;
}
tại sao không làm việc ??? – JellyBelly
Bạn có thể sử dụng hàm này getimagesize ("url"); . Ref: http://php.net/manual/en/function.getimagesize.php – InventorX