禁用特殊目录上的某些 php 功能

6 php windows apache

我想禁止执行一些PHP之类的函数file_put_contentexeceval在特殊的目录。

我可以disable_functions在 php.ini中使用,但如何定义一个特殊的文件夹,如c:\poject\public

小智 5

如果您的 php.ini 工作版本禁用了您想要的功能,那么您只需将该文件夹“链接”到该指定的 .ini 文件即可。这意味着您的 Web 服务器在从该目录提供文件时,应该使用该特定的 .ini 文件而不是系统文件。

如果您使用 Apache2 作为服务器,可以在这里找到解决方案,您可以为每个虚拟主机定义特定的 php.ini 文件。假设您的特定文件夹是/var/www/web1,您应该将禁用该功能的php.ini放入/var/www/web1并使用此Apache2配置

<VirtualHost 1.2.3.4:80>
[...]
PHPINIDir /var/www/web1
[...]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉或不使用 VirtualHosts(但仍在使用 Apache2),另一种可能的解决方案是将 PHP 配置放入文件夹中名为 .htaccess 的文件中,语法如下:

php_value disable_functions "file_put_content,exec,eval"
Run Code Online (Sandbox Code Playgroud)


Roh*_*man 5

根据PHP 文档,您不能在 php.ini 文件以外的任何地方使用 disable_functions 设置。

如果您需要对函数进行每个虚拟主机或每个目录的限制,我建议使用单独的PHP-FPM实例,每个实例都可以有自己的 php.ini。它还提供了额外的安全优势,例如每个守护程序实例的完整沙箱。

编辑:

您可以在官方文档中阅读有关它的信息

或者

UNIX 和 TCP 套接字的php-fpm 示例配置