我似乎在这方面找不到任何东西,我想知道是否有其他人遇到过这个问题或知道原因。
在将其保存到数据库之前,我有一些 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;'
?>