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

0

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

У меня есть код 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;'
?>
  • 1
    php -l -dshort_open_tag=on обходной путь - это передать его через php -l -dshort_open_tag=on чтобы вызвать <? токены должны быть распознаны.
  • 0
    Я искал неправильный файл php.ini на сервере. Похоже, что short_open_tag выключен, а мы все равно не хотим. Изменение этого и включение display_errors ....
Теги:
io
syntax-checking
phplint

1 ответ

0
Лучший ответ

Оказывается, это была простая проблема. Я искал неправильный файл 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 минут после того, как я это продумал, но я оставлю это здесь для следующего человека.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню