Кажется, я ничего не могу найти на этом, и мне интересно, столкнулся ли кто-нибудь с этой проблемой или знает причину.
У меня есть код PHP, который я пытаюсь проверить синтаксис, прежде чем я сохраню его в базе данных.
Я нахожусь в Ruby, но это не имеет значения. Я использую php -l
для проверки синтаксиса и php -l
его для сохранения или вывода любых синтаксических ошибок, которые происходят.
Это более новая установка сервера, поэтому я предполагаю, что проблема связана с чем-то, что требует установки или настройки в php.ini
которая нуждается в настройке.
Если у php-контента есть вопиющая ошибка и начинается с <?
, функция lint PHP не улавливает ошибку.
Если содержимое php имеет ту же самую грубую ошибку и начинается с <?php
, функция ссылок PHP поймает ошибку.
Код ruby - содержимое, помещая его в файл temp, затем запускает php -l в tempfile:
module PhpValidator
def validate_php
output = IO.popen("php -l", "r+") do |f|
f.puts self.content
f.close_write
f.read
end
if $? != 0
output.sub!("Errors parsing -", "")
errors.add(:content, "contains invalid PHP: #{output}")
end
end
end
Затем в модели, где сохраняется содержимое /php:
before_save :validate_php
Пример PHP, который недействителен с
<?
echo "test";
dsfaks;fjaskl;fkas0f9qiroawlsfkasdfa;'
?>
Оказывается, это была простая проблема. Я искал неправильный файл php.ini
.
Из командной строки я сделал:
php -i | grep php.ini
php -i | grep php.ini
чтобы выяснить, какой файл php.ini был активным.
Затем, глядя туда, я заметил, что:
short_open_tag
предпочтение было Off
и оно должно быть On
.
Во-вторых, я получал простой Errors parsing -
когда была синтаксическая ошибка, а это означало, что мне также необходимо включить display_errors
в файле php.ini.
Простая проблема, мне потребовалось 5 минут после того, как я это продумал, но я оставлю это здесь для следующего человека.
php -l -dshort_open_tag=on
обходной путь - это передать его черезphp -l -dshort_open_tag=on
чтобы вызвать<?
токены должны быть распознаны.php.ini
на сервере. Похоже, что short_open_tag выключен, а мы все равно не хотим. Изменение этого и включение display_errors ....