Добавьте дополнительный php.ini на общий сервер

Я хочу иметь display_errors=on в php.ini, чтобы получать больше информации, чем просто «500», при разработке PHP-скриптов для моего веб-сайта на общем сервере.

Я узнал, что для этого требуется модификация php.ini, что в моем случае невозможно.

отчеты phpinfo

Loaded Configuration File                /etc/php8.2/php.ini
Scan this dir for additional .ini files  (none)

Конечно, я не могу изменять файлы на /etc/php8.2/

По крайней мере, я могу это прочитать и найти там display_errors=off.

Каков синтаксис ini_set для добавления собственного каталога для сканирования дополнительного php.ini?

Я заметил, что очень глупые синтаксические ошибки (например, отсутствие точки с запятой) не фиксируются

ini_set("log_errors", 1);
ini_set("error_log", getcwd() . "/php-error.log");

потому что они происходят во время компиляции, задолго до выполнения ini_set (и даже настроек .htaccess) и т. д.

Если это сервер общего хостинга и подключен к Интернету, возможно, он настроен на запись ошибок в файл, а не на отображение их на экране — это разумно как для безопасности, так и для лучшего взаимодействия с пользователем. Если вы не можете найти файл журнала PHP для просмотра ошибок, обратитесь к системному администратору или в службу поддержки.

ADyson 04.07.2024 13:45

Если вы обслуживаете веб-сайт через PHP-FPM, вы можете использовать .user.ini

DarkBee 04.07.2024 13:46

Если ваш сервер поддерживает использование файлов .htaccess, вы можете попробовать добавить в этот файл собственные настройки, например. php_value display_errors 1.

Cyclonecode 04.07.2024 13:47

P.S. Для разработки гораздо лучше иметь на своем компьютере среду разработки с установленным PHP и т. д. Затем вы можете настроить это для отображения ошибок непосредственно в выводе, если вам так проще. После того как ваш скрипт будет разработан и протестирован, вы сможете развернуть его на сервере для реального использования пользователями. Это упрощает разработку и тестирование, не создает риска вмешательства в вашу реальную среду и означает, что легче работать над улучшением сценария, пока текущий еще активно используется. Разработка непосредственно на сервере — очень неоптимальное решение.

ADyson 04.07.2024 13:47

Если вы используете WordPress, вы можете попробовать использовать мой плагин, который поддерживает изменение настроек PHP с помощью файла .htaccess или .user.ini: wordpress.org/plugins/custom-php-settings

Cyclonecode 04.07.2024 13:49

Этот вопрос похож на: Как я могу получать полезные сообщения об ошибках в PHP?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

Nico Haase 04.07.2024 14:48

Кроме того, может быть интересно использовать такой инструмент, как Sentry, для регистрации таких ошибок в инструменте, где вы можете найти их лучше, чем в любом текстовом файле журнала, и это намного лучше, чем показывать все необработанные сообщения об ошибках вашим клиентам.

Nico Haase 04.07.2024 14:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
7
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Спасибо @Cyclonecode, @ADyson и @Nico Haase за ваши подсказки.

Конечно, установка собственного веб-сервера и PHP и, в конечном итоге, базы данных с тестовыми данными будет лучше в долгосрочной перспективе. Моя единственная мера безопасности, позволяющая скрыть неработающую страницу от других пользователей, — это временное и еще не связанное имя страницы. Не слишком профессионально, признаюсь. Еще одной подсказкой может быть редактор с лучшей проверкой синтаксиса PHP, чем у Notepad++. Дополнительные методы ini_set, упомянутые в ссылке @Nico, просто изменили формат ответа HTTP CODE 500, не повезло.

Я перепробовал все, что нашел до сих пор, включая подход .htaccess, но безуспешно (имею к нему доступ и могу, например, настроить страницу 404).

Но я нашел другое решение (где-то в stackoverflow?), еще не упомянутое: если синтаксическая ошибка находится внутри включаемого файла, об этом сообщается на экране. Независимо от того, вызывается ли ошибочная функция.

Образец:

<!DOCTYPE html> 
<html><head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width">
<title> PHP Test Environment </title>
</head>
<body>
<?php
ini_set("log_errors", 1);
ini_set("error_log", getcwd() . "/php-error.log");
function shutDownFunction() {
    echo "shutdown_function running";
    $error = error_get_last();
    if ($error['type'] === E_ERROR) print_r ($error);
}
register_shutdown_function('shutDownFunction');

include './db_functions.php';  // supplies connect(), getID(), getTimeSeries() 
try {
  include './error.php';  // Syntax error in there is reported on screen
  $db = connect(); 
  if ($db) echo "Connected ! <br>";
  $ID = getID($db, "Gesamt");
  $pos = 6;
  $time = '2024-06-26';
  echo json_encode(getTimeSeries($db, $ID, $pos, $time, 4));
  $db -> close();
  // x  // if comment removed, error here is not shown, simply reporting `HTTP ERROR 500`
} catch (\Throwable $t) {
     echo $t->getMessage(), " at ", $t->getFile(), ":", $t->getLine(), "<br>";
}
?>
<p>Done</p>
</body>

Это включенный файл error.php:

<?php
function wrong_getID(&$db) {
    xyz // error here
    $ID = 0;
    $q = "SELECT ID FROM Device WHERE Name='xyz'";
    $result = $db->query($q);
    if ($result && $result->num_rows == 1) 
        $ID = $result->fetch_array(MYSQLI_NUM)[0];
    return $ID;
}
?>

Поэтому поместите весь PHP-код во включенный файл и просто добавьте попробуйте {} catch (throwable) на самой странице, это может помочь.

"SELECT ID FROM Device WHERE Name='".$name."';" — имейте в виду, что такие запросы очень уязвимы для SQL-инъекций. Ознакомьтесь с подготовленными заявлениями, чтобы избежать взлома
Nico Haase 04.07.2024 15:58

См. Как включить переменную PHP в оператор MySQL, чтобы понять, что сказал Нико.

ADyson 04.07.2024 16:14

Правильный. Это просто для того, чтобы предоставить полный образец с несколькими строками для чтения. Извините, что от этого у вас сразу зазвонит колокольчик. ;)

datafiddler 04.07.2024 16:27

Конечно, это так. Имейте в виду, что вы публикуете ответ не только для себя, но и для других, и что код, указанный в ответе, небезопасен.

DarkBee 10.07.2024 07:33

Я опубликовал образец неправильного кода, который сейчас изменил, чтобы он стал довольно бесполезным, но больше не был небезопасным, когда ошибка будет исправлена. Другая проблема, связанная с отправкой пользователям сообщений об ошибках, также сомнительна и ее следует устранить при публикации.

datafiddler 11.07.2024 08:49

`xyz // здесь ошибка` - мне это кажется очевидным: код не может быть разобран

Nico Haase 11.07.2024 09:35

Вы правы, @Nico Haase, это тема этого выпуска: как заставить PHP-код выявлять свои ошибки. Если компиляция не удалась, весь код, связанный с журналированием и т. д., не поможет. пример кода должен быть очевидным. Решение/обходной путь — поместить этот сомнительный код во включенный файл. В комментариях к вопросу было предложено использовать редактор с лучшей проверкой синтаксиса PHP.

datafiddler 12.07.2024 15:42

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