PHP判断远程图片或文件或url是否存在

作者:袖梨 2022-06-24


例子一

 代码如下 复制代码

//判断远程文件
function check_remote_file_exists($url)
{
$curl = curl_init($url);
// 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
// 发送请求
$result = curl_exec($curl);
$found = false;
// 如果请求没有发送失败
if ($result !== false) {
// 再检查http响应码是否为200
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$found = true;
}
}
curl_close($curl);

return $found;
}


当然也有很多其它方法,或多或少有些限制和缺陷,如:

(1)使用fopen()函数,它要在allow_url_open开启的状态下,否则会报错。

 代码如下 复制代码
$url = 'http://www.111com.net /img/qrcode_for_phpddt.JPG';
if(@fopen($url, 'r')) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

(2)get_headers取得服务器响应一个 HTTP 请求所发送的所有标头,效率较低,你可以测试下。

 代码如下 复制代码

$url = 'http://www.111com.net /img/qrcode_for_phpddt.JPG';
 
stream_context_set_default(
    array(
        'http' => array(
             'timeout' => 1,
            )
    )
);

 
$headers = get_headers($url);
 
if(preg_match('/200/',$headers[0])) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

(3)file_get_contents()函数

 

 代码如下 复制代码
 $opts = array(
    'http'=>array(
    'timeout'=>3,
    )
);
$context = stream_context_create($opts);
$resource = @file_get_contents('http://www.111com.net /img/qrcode_for_phpddt.JPG', false, $context);
 
if($resource) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

参考资料:fopen函数用法

 

参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

 

mode 参数的可能的值

 

mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件

相关文章

精彩推荐