我很惊讶,以前绝对没见过这个问题 - 我一直忙着整个晚上和早上试图通过php.ini禁用shell_exec(以及其他一些功能),但似乎没什么用。如果我运行phpinfo(),则本地值表明功能已禁用且未设置主值。
但是,如果我尝试运行该函数(函数类似于shell_exec()),它仍然有效,给我输出,而不是被禁用。
任何帮助都会非常感激,我们完全迷失了。用Plesk 11运行Ubuntu。
亲切的问候,
答案 0 :(得分:0)
服务计划>你的计划> PHP设置>在文本框“其他配置指令”中写下“disable_functions = shell_exec” - 点击“更新和放大”。同步
所有未锁定的订阅都会在php.ini文件中获取此指令。
我已经检查过disable_function在应用于“本地值”和“主值”之前不起作用。当PHP作为Apache模块工作时,disable_function不适用于主部件。我确定它发生了,因为在apache mudule中有“加载配置文件”,它位于/ etc / apache /或/ etc / httpd /中。 因此,PHP设置是从两个独立的php.ini文件合并而来的 - 来自全局和订阅的php.ini。
在FastCGI模式下,“已加载的配置文件”是一个订阅级别的php.ini,因此只有一个php.ini有效。
因此,您遵循以下步骤是显而易见的: - 使用FastCGI并禁止为您的用户更改此模式(plesk中有此功能) 要么 - 对于Apache模块,将相同的指令添加到全局php.ini
答案 1 :(得分:0)
我可以确认这一点(而不是运行Plesk)。我在我的PHP-FPM php.ini文件中有这个:
[HOST=mycustomer.com]
upload_max_filesize=7M
disable_functions=phpinfo,exec,shell_exec,system,passthru
包含
的脚本<?php
phpinfo();
有效(虽然它不应该!)并实际显示:
upload_max_filesize 7M
...
disable_functions phpinfo,exec,shell_exec,system,passthru
所以有些奇怪的事情正在发生。加载了正确的文件和部分(我可以从phpinfo输出中看到),但设置无效,而不是disable_functions,至少。
对我来说看起来像某种错误。