2013-02-19 123 views
-1

我可以在MAMP上完美执行代码,但不能在我的hostgator服务器上执行。在服务器上,文本会自动转义以防止执行。为什么此PHP代码在localhost上工作,但不在共享主机上工作?

<?php 
    if (@isset($_POST['code'])) { 
     @$code = $_POST['code']; 
     @eval($code); 
    } 
    ?> 
    <head> 
     <style> 
      textarea{ 
       font-family: verdana; 
       font-size:20px; 
       color: #2799a0; 
      } 
      input[type="submit"] { 
       width: 200px; 
       height: 100px; 
       font-size: 30px; 
      } 
     </style> 
     <title>PHP Playground</title> 
    </head> 
    <form action="playground.php" method="POST"> 
     <textarea name="code" cols="100" rows="20"><?php echo $_POST['code']; ?></textarea><br><br> 
     <input type="submit" value="Execute"> 
    </form> 
+1

不要在用户输入中使用'eval'!根本不要使用'eval'。您允许用户在服务器上注入任意PHP,这就是为什么大多数托管提供商会禁用它。 – andho 2013-02-19 02:43:40

+0

这只是个人用于测试脚本而不处理安装程序,我不够天真,无法将其上传到生产服务器。 – 2013-02-19 02:45:21

+0

如果你想调试你的代码,不要在行前添加'@'来抑制错误和警告。 – Raptor 2013-02-19 02:46:25

回答

0

他们可能禁用evalphp.ini。这很好,因为你永远不需要使用eval() ...尤其不要用你使用它的非常危险的方式。

如果您不是在任何事情的前面用@压制他们,您都会看到一个错误。

我建议使用codepad为php操场。

2

从PHP文档:(减去由于其格式,以markdowm限制)

http://www.php.net/manual/en/function.eval.php

注意

中的eval()语言结构是非常危险的,因为它允许任意PHP的执行码。因此不鼓励它的使用。如果您已经仔细核实没有其他选择而不是使用此构造,请特别注意不要将任何用户提供的数据传递给它,而不事先进行适当的验证。

如果你检查的phpinfo()为您的主机方案,你会看到evaldisable_functions指令下上市,这意味着它不能被使用。