PHP 7.4 и MIME-тип удаленных файлов

У меня проблема с PHP 7.4. Следующий сценарий: у меня есть файл с именем «image.php», к которому прикреплен параметр «url». Это загрузит внешние изображения. Чтобы убедиться, что это PNG, я проверяю тип MIME через curl. С PHP 7.3 (и ниже) он работает нормально, но PHP 7.4 не возвращает изображение, он возвращает сообщение об ошибке (('No png file')).

Небольшая часть кода:

$cURL = curl_init($_GET['url']);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_exec($cURL);
$curl_info = curl_getinfo($cURL, CURLINFO_CONTENT_TYPE);
if ($curl_info == 'image/png') die('No png file');
header('Content-type:'.$curl_info);
readfile($_GET['url']);

Кто-нибудь знает, почему он не работает под PHP 7.4?


person Maartiin    schedule 14.12.2019    source источник
comment
Мне любопытно узнать, почему вы пытаетесь проверить что-то, что считается ИСТИННЫМ, и используете файл No png в файле die(). Это, вероятно, не исправит это, но, похоже, противоречит самому себе.   -  person Funk Forty Niner    schedule 14.12.2019
comment
Есть некоторый код до и после, но это проблемная часть кода для целей тестирования. Как я уже сказал: работает под PHP 7.3 и ниже, но не с PHP 7.4... :-/   -  person Maartiin    schedule 14.12.2019
comment
Какую отладку вы сделали? Каково значение $curl_info?   -  person Dharman    schedule 14.12.2019


Ответы (1)


Почему PHP 7.3 работает нормально? чего ты пытаешься добиться здесь?

Если вы хотите отобразить изображение, если его тип PNG, не кажется ли вам, что вы должны четко указать это в своем коде?

$cURL = curl_init($_GET['url']);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_exec($cURL);
$curl_info = curl_getinfo($cURL, CURLINFO_CONTENT_TYPE);
if ($curl_info == 'image/png') {
    header('Content-type:' . $curl_info);
    readfile($_GET['url']);
} else {
    die('No png file');
}

Кстати, приведенный выше код отлично отображает изображение как на PHP 7.4, так и на PHP 7.3, если и только если тип изображения PNG

person Rain    schedule 15.12.2019