PHP 7.2 - Отсутствующие расширения не возвращают ошибок - Останавливает выполнение - PullRequest
0 голосов
/ 07 декабря 2018

Я борюсь с этой проблемой уже со среды, и результат после моих исследований и тестов между PHP 5.6 и PHP 7.2 (также 7.1) таков: мой PHP 7 не жалуется и не замечает отсутствие расширений в моей среде.

Вместо этого он просто останавливает выполнение без сообщения об ошибке.

Вопрос

Почему PHP 7.x останавливает выполнение в середине скрипта * и не выполняетбольше не выдает сообщение об ошибке или подсказку об отсутствующих расширениях PHP?

* В основном на позиции, где функция требует использования определенного расширения PHP.

Среда

Operating System :  Debian GNU/Linux 9.6 (stretch)
Web Server       :  nginx/1.10.3
PHP              :  PHP 7.2.12

/ etc / apt / sources.list

# deb cdrom:[Debian GNU/Linux 9.2.1 _Stretch_ - Official amd64 NETINST 20171013-13:07]/ stretch main

#deb cdrom:[Debian GNU/Linux 9.2.1 _Stretch_ - Official amd64 NETINST 20171013-13:07]/ stretch main

deb http://ftp.de.debian.org/debian/ stretch main
deb-src http://ftp.de.debian.org/debian/ stretch main

deb http://security.debian.org/debian-security stretch/updates main
deb-src http://security.debian.org/debian-security stretch/updates main

# stretch-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ stretch-updates main
deb-src http://ftp.de.debian.org/debian/ stretch-updates main

Проблема

В то время как PHP 5.6 жалуется на отсутствие драйверов или недопустимую функцию, он просто останавливает выполнение при необходимости в середине моего кода, без сообщения об ошибке.

Пример : если некоторые из этих расширений не установлены, проблема возникает:

php7.2-mysql
php7.2-mbstring
php7.2-soap
php7.2-simplexml

Эта проблема действительно сбивала с толку, потому что я включил отчет об ошибкахи ошибки отображения, ошибки запуска в моем /etc/php/7.2/fpm/php.ini, а также работа с ...

ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting( E_ALL | E_STRICT);

... в моем коде.Но все же не появляется сообщение или ошибка для отсутствующих расширений.

Разве PHP 7.2 не может больше выдать ошибку, когда функция вызывает пропущенные необходимые расширения?Или в настройках по умолчанию php.ini?

есть какая-то неверная конфигурация. Что мне здесь не хватает?


20181210

Решение

В конце концов, это была моя собственная ошибка, я позволил моему Router-Script попробовать / перехватить исключения и Throwables в переменную, но тогда не сбрасывал и не отлаживал их.Прошу прощения за всю затею

Дополнительное важное замечание

Чтобы убедиться, что я сделал проблему здесь понятной : я могу получать сообщения об ошибках и исключения для большинства распространенных проблем.ошибки, такие как неправильное написание функции, неправильный синтаксис, объявление, требование, отсутствующий файл и так далее.Но моя проблема здесь в том, что PHP 7.2 не может заметить, что отсутствует какое-то php-расширение, и вместо того, чтобы давать какую-то обратную связь на странице или в журнале, он просто останавливается на функции, которая будет / должна требовать php-расширения.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы пробовали error_reporting(-1)?

Похоже, что error_reporting( E_ALL | E_STRICT) не обрабатывает все ошибки синтаксического анализа / синтаксиса.

См. Например:

РЕДАКТИРОВАТЬ: для ловли ошибок / исключений также может быть полезным(см. комментарии)

try {
     // Your code
} catch(Throwable $e) {
    echo $e->getMessage();
}

Вы можете перехватить Error или Throwable (что ловит исключения и ошибки (> PHP 5))

0 голосов
/ 07 декабря 2018

Вы выполняете php 7.2, используя php-fpm?Php.ini ничего не делает для php-fpm.В этом случае вам необходимо обновить файл php-fpm.conf.

Правильные строки для php-fpm:

; enable display of errors
php_flag[display_errors] = on
php_flag[display_startup_errors] = on
...