0

我似乎在这方面找不到任何东西,我想知道是否有其他人遇到过这个问题或知道原因。

在将其保存到数据库之前,我有一些 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;'
?>
4

1 回答 1

0

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

从命令行,我做了:

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

然后,看着那里,我注意到:

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

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

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

于 2015-02-03T17:58:15.783 回答