curl判断远程文件是否存在

在项目中遇到了要判断一个图片是否存在,远程服务器上

首先想到了用file_get_contents(),这个函数,可以打到效果,但是发现,会很慢,一直在请求,产看资料发现,file_get_contents/fopen 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存,curl函数则不一样

fopen/file_get_contents 只能对get形式的http请求,curl选择则更多

fopen/file_get_contents会受 php.ini中的allow_url_open设置的影响


然后使用curl函数感觉才是最佳选择,下面贴出curl请求代码

function getUrlExists($url){
$ch = curl_init(); 
$timeout = 10; 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$contents = curl_exec($ch);


if(preg_match("/404/", $contents)){
return false;
}else{
return true;
}
}    

如果大家发现更好的解决方法,欢迎一起交流学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您完成这个PHP API程序。以下是代码实现: ```php <?php $fileurl = $_POST['fileurl']; $filename = $_POST['filename']; $varkey = $_POST['varkey']; $valid_keys = array("key1", "key2", "key3"); // 合法秘钥列表 $filedata_dir = "./filedata"; // 存放下载文件的目录 // 判断秘钥是否合法 if (in_array($varkey, $valid_keys)) { // 获取远程文件大小 $ch = curl_init($fileurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); $data = curl_exec($ch); $filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); curl_close($ch); // 判断文件大小是否小于1GB if ($filesize < 1073741824) { // 下载远程文件并保存到本地目录 $filedata_path = $filedata_dir . "/" . $filename; $fp = fopen($filedata_path, "w"); $ch = curl_init($fileurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec($ch); curl_close($ch); fclose($fp); // 返回JSON格式数据 $fileurl = "http://abc.xom/filedata/" . $filename; $result = array( 'status' => 'success', 'filename' => $filename, 'filesize' => $filesize, 'fileurl' => $fileurl ); echo json_encode($result); } else { $result = array('status' => 'error', 'message' => 'File size exceeds 1GB limit'); echo json_encode($result); } } else { $result = array('status' => 'error', 'message' => 'Invalid authentication key'); echo json_encode($result); } ?> ``` 请注意,这个程序需要通过 POST 方法传递参数,而不是 GET 方法。如果您需要通过 GET 方法传递参数,请将 `$_POST` 改为 `$_GET`。此外,这个程序可能需要根据您的具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值