2014-01-13 2 views
0

У меня есть файл в моем сайте, например: http://example.com/name.txtкак проверить файл_get_contents()?

Я хотел бы, чтобы проверить, существует ли этот файл внутри функции, так что я сделал это

<?php 

function checkFile($fileUrl){ 
    if(!is_file($fileUrl) || !is_readable($fileUrl)){ 
    return 'This is not valid file'; 
    } 

} 

С checkFile('http://example.com/name.txt'); сказал, что не может подать файл , Я попытался также проверить этот метод.

function checkFile($fileUrl){ 
     $file = file_get_contents($fileUrl); 
     if(empty){ 
     return 'File not found or empty'; 
     } 
    } 

Но оба подхода дают мне ошибки статические, что файл не найден. Я уверен, что файл есть, так как я могу проверить, существуют ли файлы в Интернете?

ответ

1
function checkFile($fileUrl) { 
    if (!file_exists($fileUrl)) { 
     return 'This file is not a valid file.'; 
    } 
} 

Side Примечание Это справедливо только в PHP 5 http://us1.php.net/manual/en/function.file-exists.php

+0

Это все еще дает мне ложь. Я использовал 'var_dump (file_exists ('http://foo.com/name.txt'))' файл уже существует, но он возвращает false. – user2679413

+0

Когда я ввожу его в свой браузер, я получаю ошибку HTTP 500, а это значит, что он вернет false, потому что файл недоступен – Rottingham

+0

@ user2679413 file_exists не может связаться с удаленными серверами, вам нужно будет использовать fopen или что-то, чтобы проверить файл_exists. – Abhishek

2

В качестве альтернативы вы можете проверить заголовки ответа от сервера, если 404, то файл не существует, используя функцию

get_headers ()

http://us1.php.net/manual/en/function.get-headers.php

$file = 'http://www.domain.com/somefile.jpg'; 
$file_headers = @get_headers($file); 
if($file_headers[0] == 'HTTP/1.1 404 Not Found') { 
    $exists = false; 
} 
else { 
    $exists = true; 
} 
+1

Это, к сожалению, способствует использованию @ для устранения ошибок, что очень плохо. И, к сожалению, требуется использовать get_headers(), поскольку он ВСЕГДА бросает предупреждение о чем-то, и вы ничего не можете сделать, чтобы остановить его. Который также делает это плохой практикой :-) – Rottingham

+0

Ну, это решает цель, потому что когда-нибудь вам всегда нужно заглушать ошибки в случае получения данных с другого сервера. Потому что вам нужны только данные. Плюс get_headers не является надежным, я знаю, вместо этого любая функция, основанная на сети, ненадежна, потому что это зависит от ответа сервера. – Abhishek

Смежные вопросы