红红火火恍恍惚惚

PHP判断本地和远程文件是否存在

由 吉光片羽 在 10 年前

猴端程序猿

因为Z-Blog for PHP后台默认开启了调试,代码中任何的错误都会被获取并显示到错误页面。今天在测试KandyPicasa插件的时候总被getimagesize函数因为无法打开不存在的图片而报错终止进程,导致文章无法正常发表。一开始以为是getimagesize函数的问题,于是小心的做了判断,可在判断语句中同样有错误抛出,结果还是被终止到错误页面。不得已就换个判断方式吧,于是便有了本文的诞生。

本来想用file_exists来判断文件,可它只能检测本地的文件,百度了一下,发现remote_file_exists函数被多次提及,原以为是PHP函数,没想到是自定义的,还一堆的代码,不喜欢。听说还有个fopen函数,可这貌似需要配置php.ini中的allow_url_fopen为On,即允许远端访问。可如果无法配置并且默认为Off呢,居然还有个socket通讯可以解决,于是,就产生了如下检查本地或远程文件是否存在的通用函数:

function file_exist($url)
{
    if(preg_match('/^http:\/\//',$url)){
        //远程文件
        if(ini_get('allow_url_fopen')){
            if(@fopen($url,'r')) return true;
        }
        else{
            $parseurl=parse_url($url);
            $host=$parseurl['host'];
            $path=$parseurl['path'];
            $fp=fsockopen($host,80, $errno, $errstr, 10);
            if(!$fp)return false;
            fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n");
            if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))) return true;
        }
        return false;
    }
    return file_exists($file);
}

猜你喜欢 Related Posts

各抒己见 Comment

名称

邮箱

主页