2013-02-19 122 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指令下上市,這意味着它不能被使用。