2010-01-19 48 views
0

我在VPS上使用託管功能,他們不允許我使用php的ini_set函數在運行時設置配置,腳本基於腳本。相反,我必須直接在php.ini文件中更改設置,這是通過SSH訪問的任務。爲什麼在共享主機上關閉php的ini_set函數

這是爲什麼?

這雖然很好,就是有點惱人,因爲我有共享服務器上的12個域,我不neccessarily要全線設的設置....

回答

0

VPS提供商有一種傾向,他們的用戶儘可能使用最安全的環境。例如,禁用ini_set()通常是一種很好的安全實踐,因爲您可以在PHP代碼中輕鬆使用以GET/POST/SESSION變量作爲輸入的eval()語句。如果safe_mode已打開,我相信ini_set()默認被阻止。我會想象任何共享主機提供商將執行safe_mode

+0

只需要明確:使用eval()AT ALL是不好的做法。永遠不要使用eval()的用戶輸入,如果你需要使用eval(),即使啓用了safe_mode。 – Matchu 2010-01-19 18:03:50

2

如果它是針對經銷商的產品,可能會阻止您的客戶/客戶/用戶隨意更改php.ini設置,這通常是明智的做法。

但是,如果您有機器的完全訪問權限,您是不是應該能夠重新激活ini_set

1

像Pekka說的,如果你可以通過SSH修改你的php.ini,然後嘗試在那裏改變它。

關閉safe_mode併爲您的disable_functions

內容本指令允許你禁用某些功能,出於安全原因。它需要用逗號分隔的函數名稱列表。 disable_functions不受安全模式的影響。該指令必須在php.ini中設置。例如,您不能在httpd.conf中設置該指令。

0

您可以詳細瞭解服務器組件。 PHP作爲CGI或mod_php。 PHP是否啓用了suPHP或其他保護系統? 某些選項可以使用.htaccess文件進行更改。你有直接訪問httpd.conf文件嗎?在那裏你可以啓用ini_set() - >http://php.net/manual/en/configuration.changes.php