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); }