Laravel脚本升级时遇ErrorException:copy()因安全原因被禁用
解决Laravel升级时copy()函数被禁用的问题
升级Laravel版本时出现ErrorException: Warning: copy() has been disabled for security reasons错误,核心原因是服务器的PHP配置里将copy()函数加入了禁用列表,导致Laravel升级流程无法正常调用该函数完成文件复制操作。
排查步骤
- 创建一个包含
<?php phpinfo(); ?>的文件,访问后找到disable_functions配置项,确认copy是否在禁用列表中。 - 或者通过CLI执行命令查看:
php -i | grep disable_functions
解决方案
1. 有服务器管理权限的情况
- 找到php.ini文件位置(可通过phpinfo里的
Loaded Configuration File项查看)。 - 打开php.ini,定位到
disable_functions行,删除其中的copy,(注意保持其他函数的逗号分隔格式)。 - 重启PHP服务,比如执行
systemctl restart php-fpm(根据服务器环境调整服务名称)。
2. 无服务器权限的情况(如虚拟主机)
- 联系主机服务商,申请将
copy函数从disable_functions中移除。 - 应急替代方案:修改Laravel升级相关代码,用
file_get_contents()和file_put_contents()组合替代copy(),示例:
注意:此方法适合小文件,大文件复制可能有性能问题,且需确保目标路径有写入权限。// 原代码 copy($source, $dest); // 替换为 file_put_contents($dest, file_get_contents($source));
注意事项
- 修改php.ini后必须重启PHP服务,配置才会生效。
- 若使用Composer升级Laravel,Composer底层依赖
copy(),优先建议开启该函数而非修改代码。 - 不要随意移除
disable_functions中的其他函数,避免引入安全风险。
内容的提问来源于stack exchange,提问作者muhammed alsmawi
相关产品推荐
相关产品推荐

