Как проверить, существует ли файл на внешнем сервере? У меня есть url " http://logs.com/logs/log.csv ", и у меня есть скрипт на другом сервере, чтобы проверить, существует ли этот файл. Я пытался
$handle = fopen("http://logs.com/logs/log.csv","r"); if($handle === true){ return true; }else{ return false; }
а также
if(file_exists("http://logs.com/logs/log.csv")){ return true; }else{ return false; }
Эти методы просто не работают
Убедитесь, что включен отчет об ошибках.
Используйте if($handle)
Проверить allow_url_fopen верно.
Если это не работает, используйте этот метод на странице file_exists .
function checkExternalFile($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch); $retCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $retCode; } $fileExists = checkExternalFile("http://example.com/your/url/here.jpg"); // $fileExists > 400 = not found // $fileExists = 200 = found.
Это должно работать:
$contents = file_get_contents("http://logs.com/logs/log.csv"); if (strlen($contents)) { return true; // yes it does exist } else { return false; // oops }
Примечание. Предполагается, что файл не пуст.
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 4file dir); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); $data = curl_exec($ch); curl_close($ch); preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches); //check for HTTP headers $code = end($matches[1]); if(!$data) { echo "file could not be found"; } else { if($code == 200) { echo "file found"; } elseif($code == 404) { echo "file not found"; } } ?>