我正在尝试创建一个在线php编辑器。替代eval,我这样做
- 通过表单post(以iframe为目标)请求获取代码并将其保存在临时文件
- 包括临时文件,所以代码被执行
- 删除临时文件
<?php
session_start();
if(isset($_POST['winCode']))
{
$data=$_POST['winCode'];
$_SESSION['data']=$data;
// creating a $_SESSION['data'] ,so that
// user can maximize the resultant iframe
}
file_put_contents(session_id()."_runphp.php",$_SESSION['data']);
include(session_id()."_runphp.php");//generate output
unlink(session_id()."_runphp.php");//delete temp file
?>
这工作得很好,但是当用户通过他的代码产生错误时…断开链接不工作…
使用register_shutdown_function
点击链接http://php.net/manual/en/function.register-shutdown-function.php
register_shutdown_function( "shutdown_handler" );
function shutdown_handler() {
// delete file here
}
注意:按原样执行用户输入的代码不是一个好的做法。这个系统打开跨站脚本攻击。