Кажется, я ничего не могу найти по этому поводу, и мне интересно, сталкивался ли кто-нибудь еще с этой проблемой или знает причину.
У меня есть некоторый код PHP, который я пытаюсь проверить синтаксис, прежде чем сохранить его в базе данных.
Я в Ruby, но это не имеет значения. я использую php -l
проверить синтаксис и либо очистить его для сохранения, либо вывести любые синтаксические ошибки, которые возникают.
Это более новая установка сервера, поэтому я предполагаю, что проблема заключается в чем-то, что требует установки или настройки в php.ini
это нуждается в настройке.
Если в содержании php есть явная ошибка и он начинается с <?
функция PHP lint не улавливает ошибку.
Если содержание php имеет такую же явную ошибку и начинается с <?php
функция ссылки PHP ловит ошибку.
Код ruby - берет содержимое, помещает его в временный файл, затем запускает php -l для временного файла:
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.ini был активным.
Затем, заглянув туда, я заметил, что:
short_open_tag
предпочтение было установлено на Off
и это должно быть On
,
Во-вторых, я получал простой Errors parsing -
ответ при синтаксической ошибке, что означало, что мне также нужно было включить display_errors
в файле php.ini.
Простая проблема, у меня ушло 5 минут после того, как я обдумал это, но я оставлю это здесь следующему человеку.
Других решений пока нет …