PHP判断远程图片或文件或url是否存在
在php中要远程图片存不存在我们可以直接相关函数就可以了,像有curl,fopen之类的函数都可以快速的检测出来, 下面整理了几个例子,希望对各位有帮助。
例子一
<?php
//判断远程文件
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://s1.phprm.com/img/php_logo.png';
if(@fopen($url, 'r')) {
echo '文件存在';
} else {
echo '文件不存在';
}(2)get_headers取得服务器响应一个 HTTP 请求所发送的所有标头,效率较低,你可以测试下。
<?php
$url = 'http://s1.phprm.com/img/php_logo.png';
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()函数
<?php
$opts = array(
'http' => array(
'timeout' => 3,
)
);
$context = stream_context_create($opts);
$resource = @file_get_contents('http://s1.phprm.com/img/php_logo.png', 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 以及以后的版本所支持,仅能用于本地文件
教程地址:http://www.phprm.com/develop/60632.html
欢迎转载!但请带上文章地址^^