XML中的PHP函数?
可以用XML编写PHP函数吗XML中的PHP函数?,php,xml,simplexml,eval,Php,Xml,Simplexml,Eval,可以用XML编写PHP函数吗 <doThis> doThis(){ bang bang bang! } </doThis> 首先,您应该始终考虑运行像这样的“代码”的安全含义。如果此XML文件具有远程源,并且您执行了代码,那么它可能会执行任何操作。执行(rm-fR/some/important/path)怎么样?还是删除所有内容的数据库调用?发送方和您的代码之间需要有一种非常牢固的信任关系,还需要有强大的安全协议来防止中间人攻击和其他攻击 对你的问题来说,这是不可能
<doThis>
doThis(){
bang bang bang!
}
</doThis>
首先,您应该始终考虑运行像这样的“代码”的安全含义。如果此XML文件具有远程源,并且您执行了代码,那么它可能会执行任何操作。执行(rm-fR/some/important/path)怎么样代码>?还是删除所有内容的数据库调用?发送方和您的代码之间需要有一种非常牢固的信任关系,还需要有强大的安全协议来防止中间人攻击和其他攻击
对你的问题来说,这是不可能的。正如所评论的,XML是数据,而不是代码,并且应该是可移植的,这意味着您的PHP代码对于接受此XML的另一个客户端来说将是无意义的 但是,您可以使用eval
。也许是这样:
eval($foo->doThis);
<doThis><?php
doThis()
{
bang bang bang!
}
?></doThis>
注意:我根本不推荐这个。这不是XML的预期用途,它有很多问题。请想想其他的方式。 首先,你应该总是考虑运行像这样的“代码”的安全含义。如果此XML文件具有远程源,并且您执行了代码,那么它可能会执行任何操作。执行(rm-fR/some/important/path)怎么样代码>?还是删除所有内容的数据库调用?发送方和您的代码之间需要有一种非常牢固的信任关系,还需要有强大的安全协议来防止中间人攻击和其他攻击 对你的问题来说,这是不可能的。正如所评论的,XML是数据,而不是代码,并且应该是可移植的,这意味着您的PHP代码对于接受此XML的另一个客户端来说将是无意义的 但是,您可以使用
eval
。也许是这样:
eval($foo->doThis);
<doThis><?php
doThis()
{
bang bang bang!
}
?></doThis>
注意:我根本不推荐这个。这不是XML的预期用途,它有很多问题。请考虑其他方法。XML支持嵌入所谓的,有效的XML可以如下所示:
eval($foo->doThis);
<doThis><?php
doThis()
{
bang bang bang!
}
?></doThis>
最后一行中回声的输出为:
bang bang bang!
(让人吃惊)。您可以在内部将其映射到SimpleXMLElement,以将其简化为上面的示例代码:
$foo = simplexml_load_string($xml, 'PiSimpleXMLElement');
echo $foo->doThis(); //bang bang bang!
其工作原理如下:
/**
* SimpleXMLElement integration of PiDOMDocument
*/
class PiSimpleXMLElement extends SimpleXMLElement
{
public function __call($name, $args) {
$doc = new PiDOMDocument();
$doc->loadXML($this->asXML());
$callback = array($doc->getObject(), $name);
return call_user_func_array($callback, $args);
}
}
作为PHP处理器,您可以使用eval
或include
()。PHP是直接执行的,因此如果您的代码有致命的解析错误,整个脚本有致命的错误,如果您不喜欢这种PHP默认行为,您可以在评估字符串是否存在此类错误之前对其进行解析,请参见和或
我在我的/中选择了一个未验证的
eval
,XML支持嵌入所谓的,有效的XML可以如下所示:
eval($foo->doThis);
<doThis><?php
doThis()
{
bang bang bang!
}
?></doThis>
最后一行中回声的输出为:
bang bang bang!
(让人吃惊)。您可以在内部将其映射到SimpleXMLElement,以将其简化为上面的示例代码:
$foo = simplexml_load_string($xml, 'PiSimpleXMLElement');
echo $foo->doThis(); //bang bang bang!
其工作原理如下:
/**
* SimpleXMLElement integration of PiDOMDocument
*/
class PiSimpleXMLElement extends SimpleXMLElement
{
public function __call($name, $args) {
$doc = new PiDOMDocument();
$doc->loadXML($this->asXML());
$callback = array($doc->getObject(), $name);
return call_user_func_array($callback, $args);
}
}
作为PHP处理器,您可以使用eval
或include
()。PHP是直接执行的,因此如果您的代码有致命的解析错误,整个脚本有致命的错误,如果您不喜欢这种PHP默认行为,您可以在评估字符串是否存在此类错误之前对其进行解析,请参见和或
我在我的/中选择了未验证的
评估
,不,这是不可能的。XML是数据,不是对象;如果非PHP语言以某种方式读取该文件会怎么样?不可能。为什么不使用普通的include
或require
?可能您可以将PHP代码写入PHP文件,然后动态地包含它,但这样做应该会有一些安全问题,因为代码将有点“注入”在没有检查代码的情况下对你的系统进行测试,如果代码可能是暴力的,那么答案是否定的,这是不可能的。XML是数据,不是对象;如果非PHP语言以某种方式读取该文件会怎么样?不可能。为什么不使用普通的include
或require
?可能您可以将PHP代码写入PHP文件,然后动态地包含它,但这样做应该会有一些安全问题,因为代码将有点“注入”在没有检查代码的情况下访问系统,如果代码可能是暴力的