使用 php -l 验证语法 - 带有开始标记的行为

Using php -l to verify syntax - behavior w/ opening tags

我似乎找不到任何相关信息,我想知道是否有其他人遇到过这个问题或知道原因。

我有一些 PHP 代码,我试图在将其保存到数据库之前验证其语法。

我在 Ruby,但这并不重要。我正在使用 php -l 检查语法并清除它以保存或输出发生的任何语法错误。

这是较新的服务器安装,所以我猜问题出在需要安装的东西或 php.ini 中的设置需要调整。

如果 php 内容中有明显错误并以 <? 开头,PHP lint 函数不会捕获错误。

如果 php 内容有相同的明显错误并以 <?php 开头,PHP link 函数会捕获错误。

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 returns 无效

<?
echo "test";
dsfaks;fjaskl;fkas0f9qiroawlsfkasdfa;'
?>

原来这是一个简单的问题。我看错了 php.ini 文件。

从命令行,我做了:

php -i | grep php.ini 找出哪个 php.ini 文件处于活动状态。

然后,往里看,我注意到:

short_open_tag 首选项设置为 Off,需要 On

其次,当出现语法错误时,我得到了一个简单的 Errors parsing - 响应,这意味着我还需要在 php.ini 文件中打开 display_errors

一个简单的问题,我花了 5 分钟才想通,但我会把它留给下一个人。