PHP判断本地和远程文件是否存在
由 吉光片羽 在 11 年前
因为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);
}
Z-Blog for PHP 批量新增标签插件 KandyNewTags 发布及更新
Z-Blog for PHP 51LA统计插件 Kandy51la 发布及更新
Surface Pro 更新系统后 Windows Hello 刷脸无法使用的终极解决方案
Z-Blog for PHP 模块助手插件 KandyModuleHelper 发布及更新