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 方法。