我正在尝试创建一个使用URL的简单的is_file类型函数:
function isFileUrl($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // don't want it rendered to browser
curl_exec($ch);
if(curl_errno($ch)){
$isFile = false;
}
else {
$isFile = true;
}
curl_close($ch);
return $isFile;
}
if(isFileUrl('https://www.google.com/images/srpr/logo4w.png')==true){
echo 'TRUE';
} else {
echo 'FALSE';
}
适用于已移除的curl_setopt
,但会将内容(图片网址)呈现给浏览器,这是我不想要的。我错过了什么?我checked this similar thread,但无法在我的背景下工作。感谢。
答案 0 :(得分:4)
为什么不使用get_headers()功能?这是为这类事物设计的。
简单示例可能如下所示:
function isFile($url) {
$headers = get_headers($url);
if($headers && strpos($headers[0], '200') !== false) { //response code 200 means that url is fine
return true;
} else {
return false;
}
}
您还可以检查所需的内容类型或任何其他标题。
答案 1 :(得分:2)
我认为你想要的是HTTP标头检查以查看它是否是有效的(200)网址并且它与图像有关(内容类型=== image / jpg,image / png等)。 以下代码可能是一个开头:
function getHTTPStatus($url) {
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_VERBOSE => false
));
curl_exec($ch);
$http_status = curl_getinfo($ch);
return $http_status;
}
$img = getHTTPStatus($url);
$images = array('image/jpeg', 'image/png', 'etc');
if($img['http_code'] === 200 && in_array($img['content_type'], $images)) {
//it is an image, do stuff
}
答案 2 :(得分:0)
(自我回答/摘要)
Dragoste和Enapupe的回答都有效。根据Enapupe的回答,我将其包装成一个包含所有功能并添加了一个可选的文件类型参数。希望它有所帮助...
function isFileUrl($url, $type=''){
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_VERBOSE => false
));
curl_exec($ch);
$gh = curl_getinfo($ch);
if($type!==''){
// add types here (see http://reference.sitepoint.com/html/mime-types-full for list)
if($type=='img'){
$typeArr = array('image/jpeg', 'image/png');
}
elseif($type=='pdf'){
$typeArr = array('application/pdf');
}
elseif($type=='html'){
$typeArr = array('text/html');
}
if($gh['http_code'] === 200 && in_array($gh['content_type'], $typeArr)){
$trueFalse = true;
}
else {
$trueFalse = false;
}
}
else {
if($gh['http_code'] === 200){
$trueFalse = true;
}
else {
$trueFalse = false;
}
}
return $trueFalse;
}
//test - param 1 is URL, param 2 (optional) can be img|pdf|html
if(isFileUrl('https://www.google.com/images/srpr/logo4w.png', 'img')==true){
// do stuff
echo 'TRUE';
}
else {
echo 'FALSE';
}