Home >php教程 >php手册 >PHP判断远程图片或文件或url是否存在

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

WBOY
WBOYOriginal
2016-05-25 16:46:411556browse

在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 = &#39;http://s1.phprm.com/img/php_logo.png&#39;;
if(@fopen($url, &#39;r&#39;)) {
    echo &#39;文件存在&#39;;
} else {
    echo &#39;文件不存在&#39;;
}

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

<?php
$url = &#39;http://s1.phprm.com/img/php_logo.png&#39;;
stream_context_set_default(array(
    &#39;http&#39; => array(
        &#39;timeout&#39; => 1,
    )
));
$headers = get_headers($url);
if (preg_match(&#39;/200/&#39;, $headers[0])) {
    echo &#39;文件存在&#39;;
} else {
    echo &#39;文件不存在&#39;;
}
?>

(3)file_get_contents()函数

<?php
$opts = array(
    &#39;http&#39; => array(
        &#39;timeout&#39; => 3,
    )
);
$context = stream_context_create($opts);
$resource = @file_get_contents(&#39;http://s1.phprm.com/img/php_logo.png&#39;, false, $context);
if ($resource) {
    echo &#39;文件存在&#39;;
} else {
    echo &#39;文件不存在&#39;;
}
?>

参考资料: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 以及以后的版本所支持,仅能用于本地文件


教程地址:

欢迎转载!但请带上文章地址^^

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn