Использование 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;'
?>

1 ответ

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам