58

我需要检查远程服务器上是否存在特定文件。使用is_file()file_exists()不起作用。任何想法如何快速轻松地做到这一点?

4

8 回答 8

108

您不需要 CURL... 只是想检查文件是否存在的开销太大...

使用PHP 的 get_header

$headers=get_headers($url);

然后检查 $result[0] 是否包含 200 OK (这意味着文件在那里)

检查 URL 是否有效的函数可能是这样的:

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";
于 2015-04-18T08:36:27.443 回答
83

你必须使用 CURL

function does_url_exists($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;
}
于 2011-10-07T08:41:29.853 回答
18

我刚刚找到了这个解决方案:

if(@getimagesize($remoteImageURL)){
    //image exists!
}else{
    //image does not exist.
}

来源:http ://www.dreamincode.net/forums/topic/11197-checking-if-file-exists-on-remote-server/

于 2013-07-24T14:19:14.197 回答
11

嗨,根据我们在 2 个不同服务器之间的测试,结果如下:

使用 curl 检查 10 个 .png 文件(每个大约 5 mb)平均需要 5.7 秒。对同一件事使用标头检查平均需要 7.8 秒!

所以在我们的测试中,如果你必须检查更大的文件,curl 会快得多!

我们的 curl 函数是:

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;
}

这是我们的标题检查示例:

function UR_exists($url){
   $headers=get_headers($url);
   return stripos($headers[0],"200 OK")?true:false;
}
于 2016-08-29T14:31:16.387 回答
2

您可以使用函数 file_get_contents();

if(file_get_contents('https://example.com/example.txt')) {
    //File exists
}
于 2018-10-17T13:38:07.453 回答
1

使用 curl 发出请求,看看它是否返回 404 状态码。使用 HEAD 请求方法执行请求,因此它只返回没有正文的标头。

于 2011-10-07T08:34:53.367 回答
0
$file = 'https://picsum.photos/200/300';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
} 
于 2021-05-14T11:25:41.857 回答
-1
    $headers = get_headers((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://" . $_SERVER[HTTP_HOST] . '/uploads/' . $MAIN['id'] . '.pdf');
    $fileExist = (stripos($headers[0], "200 OK") ? true : false);
    if ($fileExist) {
    ?>
    <a class="button" href="/uploads/<?= $MAIN['id'] ?>.pdf" download>скачать</a> 
    <? }
    ?>
于 2020-05-26T08:07:52.783 回答