Есть много аналогичный вопросы в этот, но все они включают выполнение stat () или filesize () для локальных файлов, которые не работают, потому что вам нужен полный путь.
Эта проблема другая, так как у меня есть несколько удаленных изображений с полными путями, и я все еще не могу получить их размер. Вот пример:
stat("https://cdn-img.health.com/sites/default/files/1532113674/1-opener-sleep-a-z-GettyImages-485559412.jpg");
Это выдает ошибку, говорящую «stat fail». Я также не могу получить размер изображения с помощью функции filesize (), получая заголовки «Content-Length» или «X-Original-Content-Length» (которые не были переданы), или скручивая изображение и получая CURLINFO_CONTENT_LENGTH_DOWNLOAD поле. Точно так же в Ruby я не могу получить размер этого изображения с помощью традиционных методов, за исключением Механизировать библиотека, которая просто работает. Вот заголовки к изображению в примере:
HTTP/1.1 200 OK
Content-Type: image/jpeg
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: max-age=1800
Date: Fri, 03 Aug 2018 14:08:39 GMT
ETag: "90c755-5717304f98380-gzip"Expires: Fri, 03 Aug 2018 14:38:39 GMT
Last-Modified: Fri, 20 Jul 2018 19:08:22 GMT
P3P: CP='PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA PRE CUR ADMa DEVa TAIo PSAo PSDo IVAo IVDo CONo TELo OTPi OUR UNRo PUBi OTRo IND DSP CAO COR'
Server: Apache
TI-Varnish-Age: 0
Via: 1.1 varnish, 1.1 ba150248cd293ea895c35304503c9f27.cloudfront.net (CloudFront)
X-Varnish: 1920400558
Vary: Accept-Encoding
Age: 19
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: pKXUfsB5egUfk4Te7oxIG7TgFLoUfMSUWqGZxd5822_ejvorITbFsg==
Какие-либо предложения?
Вы можете получить размер, выполнив:
strlen(file_get_contents('http://link.of/image.jpg'));
Пока у вас есть allow_url_fopen
включено это будет работать. В противном случае вам нужно будет использовать cURL.
Чтобы stat () определял размер файла для удаленного файла, соответствующая оболочка должна поддерживать stat из Руководство по PHP:
Начиная с PHP 5.0.0, эту функцию также можно использовать с немного Обертки URL. Обратитесь к разделу «Поддерживаемые протоколы и оболочки», чтобы определить, какие оболочки поддерживают функцию семейства stat ().
Если вы посмотрите вверх HTTP-оболочка в документации:
Поддерживает stat () — Нет
Большинство функций, которые принимают файлы в качестве аргумента, полагаются на оболочки для выполнения удаленных операций, поэтому ни одна из этих функций не сможет получить размер удаленного файла. функции cURL Вероятно, это ваш лучший выбор, если это расширение доступно для вас.
Вы можете использовать curl для получения информации о файле, скажем, если вы хотите получить размер любого файла по любому URL, тогда используйте эту функцию:
function getFileSizeByCurl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
return curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);
}
//Calling a function
echo getFileSizeByCurl('https://cdn-img.health.com/sites/default/files/1532113674/1-opener-sleep-a-z-GettyImages-485559412.jpg');