php远程图片大小怎么找
时间 : 2023-04-05 07:33:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
在PHP中,获取远程图片的大小可以通过curl或file_get_contents函数进行。下面分别介绍这两种方法。
1. 使用curl获取图片大小
通过curl获取远程图片大小的方法如下:
```php
function getRemoteImageSize($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$data = curl_exec($ch);
$headers = explode("\n", $data);
foreach ($headers as $header) {
if (strpos($header, 'Content-Length:') === 0) {
return (int) trim(substr($header, 16));
}
}
return false;
}
这个方法首先使用curl_init()函数初始化一个curl会话,然后设置一些选项。这里我们设置了CURLOPT_RETURNTRANSFER为1,表示返回字符串而不是直接输出;CURLOPT_FOLLOWLOCATION为1,表示遇到重定向时自动跟随;CURLOPT_HEADER和CURLOPT_NOBODY都为1,表示只获取头部信息而不获取实际内容。然后使用curl_exec()函数执行curl会话,并获取返回的数据。我们再将头部信息以换行符为分隔符拆分成数组,然后遍历这个数组,查找Content-Length头部信息,如果找到了,即可取得图片大小。
2. 使用file_get_contents获取图片大小
通过file_get_contents获取远程图片大小的方法如下:
```php
function getRemoteImageSize($url) {
$data = file_get_contents($url, false, stream_context_create([
'http' => [
'method' => 'HEAD'
]
]));
foreach ($http_response_header as $header) {
if (strpos($header, 'Content-Length:') === 0) {
return (int) trim(substr($header, 16));
}
}
return false;
}
这个方法使用了file_get_contents函数从远程获取文件头信息。我们需要额外传递一个stream参数,其中http只是其中一种上下文类型,我们设置了method为HEAD,表示只获取头部信息而不获取实际内容。最后,我们遍历http_response_header数组,查找Content-Length头部信息,如果找到了,即可取得图片大小。
总结:
以上两种方法都可以用来获取远程图片大小。curl方法更加灵活,可以在请求中设置更多的选项;而file_get_contents方法则更加简单易用,适用于简单需求。需要注意的是,这两者都有一定的性能消耗,不建议经常获取图片大小。
在PHP中,可以使用 curl库 或者 file_get_contents函数获取远程图片的大小。
使用 curl库获取远程图片大小:
首先,需要使用curl_init()函数初始化一个curl会话,然后设置curl选项,最后使用curl_exec()函数执行curl操作,获取远程图片的大小。
```php
$img_url = 'https://example.com/image.jpg';
$ch = curl_init($img_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$content_length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
if ($http_code == 200) {
echo "Image size is: " . $content_length . " bytes.";
} else {
echo "Failed to get image size.";
}
使用 file_get_contents函数获取远程图片大小:
可以使用file_get_contents函数获取远程图片的内容,并检查HTTP响应头来获取远程图片的大小。
```php
$img_url = 'https://example.com/image.jpg';
$options = array(
'http' => array(
'method' => "HEAD",
'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0\r\n" .
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" .
"Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n",
'follow_location' => 1,
'max_redirects' => 20,
'ignore_errors' => true,
'timeout' => 10,
),
);
$context = stream_context_create($options);
$header = @get_headers($img_url, 1, $context);
if ($header) {
$filesize = $header['Content-Length'];
echo "Image size is: " . $filesize . " bytes.";
} else {
echo "Failed to get image size.";
}
需要注意的是获取远程图片大小时,有些服务器可能不支持 HEAD 请求方法,这种情况下需要使用 GET 方法。
上一篇
订单超时处理php怎么做
下一篇
php怎么判断输入数据库
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章