在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 以及以后的版本所支持,仅能用于本地文件
教程地址:
欢迎转载!但请带上文章地址^^