Извлечение Content-Type внешнего веб-сайта и сохранение значения в файле JSON как «Null»

Я пытаюсь извлечь код внешнего веб-сайта и сохранить его в файле JSON (UTF-8).

Он работал хорошо, пока я не попробовал "www.secra.de" сохранить значение с этой страницы как Null.

Как я вижу, это не просто получение значений в «Content-Type», и я думаю, что это могло быть перенаправление, но я не уверен.

Как лучше всего ее решить?

    $domain   = "http://www.secra.de";
    $info = get_headers($domain, 1)["Content-Type"];
    $infostr = explode('=', $info);
    $encoding = end($infostr);

    if (!empty($info)){
        $data_array[$key]['encode'] = $encoding;
    } else {
        $data_array[$key]['encode'] = "It don't have Encode";
    }
    $json = json_encode($data_array);
    file_put_contents('data/data.json', $json);
};

В чем именно ценность $info, который не работает…?

deceze 07.06.2018 15:16

$ info работает, я сделал несколько "тестов", и проблема в том, что $ infostr = explode ('=', $ info); Я думаю, что если я напечатаю $ info, он покажет значения всех Content-Type, но если я напечатаю $ encoding, он покажет "Null"

Joanmi 07.06.2018 15:19

Итак, я повторяю, какова конкретная ценность $info, когда он не работает? Если вы замените $info на 'text/html; charset=utf-8', тогда ваш код будет работать нормально.

deceze 07.06.2018 15:22

Это значение: text / html; charset = iso-8859-1 [1] => текст / html; charset = utf-8

Joanmi 07.06.2018 15:26

Wat? Откуда именно вы взяли это значение?

deceze 07.06.2018 15:28

Я получаю это следующим образом: $ info = get_headers ($ domain, 1) ["Content-Type"]; print_r ($ информация); выход;

Joanmi 07.06.2018 15:29

1) Невозможно воспроизвести. 2) Результатом этого все равно не должно быть null.

deceze 07.06.2018 15:31

Я изменил код своего поста, теперь вы можете воспроизвести его думаю

Joanmi 07.06.2018 15:33

На www.google.com он работает, но на www.gmail.com он тоже показывает null

Joanmi 07.06.2018 15:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что http://www.secra.de перенаправляет на https://www.secra.de, а функции get_headers возвращают вам Content-Type для оба исходного и перенаправленного запроса:

[Content-Type] => Array
    (
        [0] => text/html; charset=iso-8859-1
        [1] => text/html; charset=utf-8
    )

Итак, проблема в том, что вы обрабатываете $info как строку, когда это массив. Исправьте это:

$info = get_headers($domain, 1)["Content-Type"];
if (is_array($info)) {
    $info = end($info);
}
$infostr = explode('=', $info);
$encoding = end($infostr);

Один вопрос, вы можете объяснить мне эту строчку вашего кода? если (is_array ($ info)) {$ info = end ($ info); }

Joanmi 07.06.2018 16:20

Другие вопросы по теме