trae 是轻量级本地开发工具,自带 PHP 但不管理 disable_functions 配置;需手动修改其实际加载的 php.ini(如 C:\trae\php\php.ini),按规范设置 disable_functions 并重启服务方可生效。
trae
是什么,和 PHP disable_functions 有关系吗
trae 不是 PHP 官方组件,也不是 Apache/Nginx 的内置模块,它是一个独立的、轻量级的本地开发环境工具(类似 Laragon、XAMPP 的简化版),主打开箱即用。它自带 PHP,但不接管 PHP
配置文件
的自动更新逻辑——也就是说,
必须手动改它打包的 PHP 配置,trae 本身不提供图形界面或命令行开关来禁用函数。
常见误解是“trae 有
这个配置项”,实际上并不存在这个 ini 指令,PHP 只认标准的
。
找到 trae 真正使用的
php
.ini 文件
trae 启动后用的是它自己目录下的 PHP,不是系统全局 PHP。必须定位到它实际加载的配置文件,否则改了也没用。方法如下:
在 trae 界面点击「PHP」→「phpinfo()」,打开页面后搜索
,看到的路径就是真实生效的
典型路径如:
或
别直接改 trae 安装目录外的其他
(比如 WAMP 或 Homebrew 的),trae 不读那些
正确设置 disable_functions 并验证是否生效
编辑上一步找到的
,在
或任意靠前位置添加:
立即学习
“
PHP免费学习笔记(深入)
”;
Trae
字节跳动推出的AI编程IDE工具
下载
注意要点:
函数名之间用英文逗号分隔,**不能有空格**(
❌,
✅)
大小写敏感:PHP 中函数名全小写,写成
或
无效
修改后必须重启 trae 的 PHP 服务(在 trae 界面点「PHP」→「Restart」,不是只刷新网页)
验证方式:新建一个
放在 trae 的 Web 根目录,内容为
,访问后应返回空或报错
为什么有些函数禁不掉?常见漏网之鱼
单纯列在
里还不够,以下情况会导致禁用失效:
对通过
动态加载的扩展函数无效(不过 PHP 8+ 已移除
)
某些函数如
或
可绕过函数禁用,属于协议层问题,需配合
和
如果 trae 启用了多个 PHP 版本(如 PHP 7.4 / 8.2 切换),要确认你改的是当前启用版本的
,而不是其他版本的
Windows 下部分函数(如
)不在默认禁用列表中,需手动追加
真正起作用的永远是 PHP 解析器读到的那个
,而不是你“以为它该读”的那个。
disable_functionsdisable_functions_traedisable_functionsLoaded Configuration Filephp.iniC:\trae\php\php.ini/Applications/trae.app/Contents/Resources/php/php.iniphp.iniphp.ini[Function Restrictions]disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_execexec, systemexec,systemEXECShell_exectest.phpWarning: shell_exec() has been disabled for security reasonsdisable_functionsdisable_functionsdl()dl()file_get_contents('php://filter')include('data://text/plain,...')allow_url_fopen = Offallow_url_include = Offphp.inicom_loadphp.ini