Здравствуйте, есть сайт на древней CMS, в файл index.php ввожу код Код (Text): $data = __DIR__.'\\'; $file = __DIR__.'\example.txt'; $result = file_put_contents($file, $data); echo __DIR__.'\\'; exit; Всё нормально отрабатывает, файл в каталоге(windows) появляется. Убираю код, обновляю сайт, выдаёт ошибку в такой то программе, в такой то строке перед continue Но мне нужна не только код ошибки, но и много других переменных, которые я хотел бы записать в файл. Но для этого хотя бы понять почему нет записи в файл. Т.е. я этот вышеприведённый код, вставляю перед строкой(перед continue), в которой вышла ошибка, но файл не создаётся. Любая абракадабра(фыафываы) на мониторе не появляется. Как сделать запись в файл ?
Причём тут ошибки?, я могу не идти по этой ветки, а выбрать другую, которая работает без ошибок, и вставить в вызываемую функцию этот код, результат будет тот же, файл не создаётся.. и хотелось бы вначале понять причину, где что перехватывается.
Мне надо создать новую тему?, заменив строку "Убираю код, обновляю сайт, выдаёт ошибку в такой то программе, в такой то строке перед continue" на строку "Вставляю код в вызываемую функцию, которая находится в другом программном файле, обновляю сайт, текстовик не создаётся."
Разберём ситуацию по порядку. То, что вы описываете, указывает на одну из трёх типовых проблем в PHP: **скрипт не доходит до вашего кода**, **ошибка парсинга**, либо **CMS блокирует вывод/запись**. ### Почему ваш код не срабатывает в проблемном месте? 1. **Ошибка происходит раньше или является фатальной**. Если PHP встречает `Fatal error` или `Parse error`, выполнение немедленно останавливается. Код, который вы вставили перед ошибкой, просто не выполняется. 2. **Ошибка синтаксиса (Parse error)**. Если в файле есть синтаксическая ошибка (например, `continue` вне цикла, незакрытая скобка, опечатка), PHP **не компилирует файл вообще**. В этом случае ни один ваш `echo` или `file_put_contents` не отработает. 3. **Буферизация вывода или кастомный обработчик ошибок**. Старые CMS часто используют `ob_start()`, `set_error_handler()` или собственные роутеры, которые подавляют `echo` и перенаправляют вывод. 4. **Пути с обратным слешем**. `__DIR__.'\example.txt'` на Windows обычно работает, но в некоторых конфигурациях PHP интерпретирует `\` как экранирование. Лучше использовать `DIRECTORY_SEPARATOR` или прямой слеш `/`. --- ### ✅ Что сделать в первую очередь? (Пошагово) #### 1. Включите логирование ошибок PHP Добавьте **в самые первые строки** `index.php` (до любого кода CMS): ```php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); ``` Обновите страницу. Вы увидите **точный текст ошибки и стек вызовов**. Это ключ к пониманию, почему скрипт падает. #### 2. Проверьте, доходит ли выполнение до вашего кода Вместо `file_put_contents` используйте `error_log()`. Он пишет в системный лог PHP даже при частичном падении скрипта и не зависит от прав на запись в веб-директории: ```php error_log("DEBUG: Дошли до строки X. Переменная: " . print_r($myVar, true)); ``` Посмотрите лог: `php_errors.log` (обычно в `php.ini` `error_log = "..."`) или в панели хостинга. #### 3. Надёжный способ записи в файл (если `error_log` недоступен) ```php $logFile = __DIR__ . '/debug.log'; $message = date('Y-m-d H:i:s') . ' | ' . print_r($yourVars, true) . PHP_EOL; file_put_contents($logFile, $message, FILE_APPEND | LOCK_EX); ``` `FILE_APPEND` не перезаписывает, а добавляет. `LOCK_EX` предотвращает конфликты при одновременных запросах. Используйте `/` вместо `\\` для путей. #### 4. Убедитесь, что файл вообще парсится Если после добавления `ini_set('display_errors', 1)` вы видите **белый экран** или ошибку `Parse error`, значит, в файле есть синтаксическая проблема. В этом случае: - Проверьте парность скобок `{}`, `()`, `[]` - Убедитесь, что `continue` находится строго внутри `foreach`, `for`, `while` или `do...while` - В PHP 8+ `continue` вне цикла вызывает `Fatal error`, в старых версиях тоже, но может маскироваться CMS --- ### Практический алгоритм отладки 1. Откройте `index.php`, добавьте в начало: ```php error_log('INDEX.PHP STARTED'); ini_set('display_errors', 1); error_reporting(E_ALL); ``` 2. Обновите сайт → смотрите `php_errors.log` или экран. 3. Найдите точный файл и строку ошибки из лога (часто CMS загружает файл через `include/require`, и ошибка не в `index.php`, а в подключаемом шаблоне/модуле). 4. В проблемном файле перед ошибкой вставьте: ```php error_log('DEBUG REACHED BEFORE LINE ' . __LINE__); ``` 5. Если лог появляется → скрипт доходит, проблема в правах/пути/буферизации. Если лога нет → ошибка парсинга или скрипт падает раньше.
Спасибо, буду разбираться с ответом, но ".. Старые CMS часто используют `ob_start()`," это действительно так
ТС, кстати, завязывай с обратными слэшами в путях, это виндовая проприетарщина, используй прямые, они работают везде.