ruby — Использование php -l для проверки синтаксиса — поведение с открытием тегов

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

У меня есть некоторый код 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;'
?>

0

Решение

Оказывается, это была простая проблема. Я смотрел не на то php.ini файл.

Из командной строки я сделал:

php -i | grep php.ini чтобы выяснить, какой файл php.ini был активным.

Затем, заглянув туда, я заметил, что:

short_open_tag предпочтение было установлено на Off и это должно быть On,

Во-вторых, я получал простой Errors parsing - ответ при синтаксической ошибке, что означало, что мне также нужно было включить display_errors в файле php.ini.

Простая проблема, у меня ушло 5 минут после того, как я обдумал это, но я оставлю это здесь следующему человеку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]