Ошибка выполения php, как можно исправить?
Подскажите откуда может быть ошибка? При запуске выдает ошибку:
*PHP Fatal error: Uncaught Error: Call to a member function xpath() on boolean in /home..../executeSimJob.php:13
Stack trace:
#0 {main}
thrown in /home/......../executeSimJob.php on line 13*
// путь
define("BASE_FOLDER", __DIR__ ."/admin");
// идентификатор
$jobId = "sim";
// код
define("JOBS_CONFIG_FILE", BASE_FOLDER . "/admin/config/jobs.xml");
include(BASE_FOLDER . "/admin/config/global.inc.php");
$xml = simplexml_load_file(JOBS_CONFIG_FILE);
$jobConfig = $xml->xpath('//job[@id = \''. $jobId . '\']'); //это 13 строка
$jobClass = (string) $jobConfig[0]->attributes()->class;
$i18n = I18n::getInstance($website->getConfig("supported_languages"));
$job = new $jobClass($website, $db, $i18n, $jobId);
$job->execute();
`
Ответы (3 шт):
Автор решения: Вадим Александру
→ Ссылка
У вас admin дважды дублируется
define("JOBS_CONFIG_FILE", BASE_FOLDER . "/config/jobs.xml");
Автор решения: Александр Срокин
→ Ссылка
Либо JOBS_CONFIG_FILE содержит некорректный путь, либо xml, которую вы пытаетесь прочитать - не валидная. Проверьте $xml === false на 12 строчке
Автор решения: tutankhamun
→ Ссылка
Ошибка возникает потому что вы пытаетесь вызвать метод не проверяя результат загрузки XML. Видимо загрузка выполнилась с ошибками и $xml имеет значение false. Чтобы разобраться необходимо проверять значение $xml и если там false - выводить в лог значение libxml_get_errors(). Например, можно добавить после вызова simplexml_load_file()
if (!($xml instanceof SimpleXMLElement)) {
error_log(var_export(libxml_get_errors(), true));
// Теоретически можно вывести ошибки и через echo, но так делать плохо.
// Настройка логирования это первое что нужно сделать при установке PHP
}