Примечание: неопределенное смещение: 1 в webservice / dispatcher.строку PHP 36 в PrestaShop веб-сервиса

Примечание: неопределенное смещение: 1 в webservice / dispatcher.строку PHP 36 в PrestaShop веб-сервиса

04.10.2019 06:53:34 Просмотров 48 Источник

Я использую prestashop webservice api для создания приложения на flutter. Однако, когда я пытаюсь получить данные из API url, я получил ответ с уведомлением PHP как " Notice: Undefined offset: 1 in /webservice/dispatcher.php на строке 36" и список объектов. Это делает меня неспособным декодировать объект в json.

Я иду к этому файлу и ошибка находится внутри этого блока: (строка 35, 36, 37)

if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
        list($name, $password) = explode(':', base64_decode($matches[1]));
        $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
}

Когда я пытаюсь получить результат в почтальоне или браузере, уведомление не отображается вообще.

Может ли кто-нибудь помочь мне избавиться от этого уведомления или любого решения для декодирования объекта? Заранее спасибо

У вопроса есть решение - Посмотреть?

Ответы - Примечание: неопределенное смещение: 1 в webservice / dispatcher.строку PHP 36 в PrestaShop веб-сервиса / Notice: undefined offset:1 in webservice/dispatcher.php line 36 in prestashop webservice

Является ответом!
Koala Yeung

04.10.2019 12:55:37

Синтаксис списка PHP занимает правую часть оператора присваивания =, разрушает его, а затем присваивает дочерние переменные переменным в нем.

Список заявление, как это:

list($name, $password) = $some_array;

Ожидает$some_arrayбудет числовым массивом с по крайней мере 2 дочерними элементами. Если есть только 1, PHP будет жаловаться, что вам не хватает 2-го элемента (смещение 1). В вашем случае вызов explode потребует:двоеточие в результате вашего результата base64_decode, что может быть не так.

Чтобы предотвратить это, вы можете изменить его, чтобы не разрушать непосредственно результат вашего вызова explode. Подобный этому:

if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
        $name_and_password = explode(':', base64_decode($matches[1]));
        $name = $name_and_password[0] ?? ''; // if not set, default to be empty string ''
        $password = $name_and_password[1] ?? ''; // if not set, default to be empty string ''
        $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
}
https://stackoverflow.com/questions/58229693/notice-undefined-offset1-in-webservice-dispatcher-php-line-36-in-prestashop-we/58234035#comment102841975_58234035
большое спасибо за помощь ^^ я дам ему попробовать
Закрыть X