PHP exec() has been disabled for security reasons

一、问题

  • exec() has been disabled for security reasons:翻译:出于安全原因,已禁用exec()
  • 代码
exec('php ' . $path . 'think optimize:schema --table ' . $tableName);

二、分析

exec()被禁用,这应该是个配置,而PHP的配置文件就在php.ini

  • 1、我们可以找到这个配置并修改一下,然后重启PHP即可~
  • 2、或者:用类似的函数shell_exec()代替函数exec()

三、解决

1、法一(推荐):使用shell_exec()方法代替exec()方法

shell_exec('php ' . $path . 'think optimize:schema --table ' . $tableName);
shell_exec(sprintf('cd %s', $file));

2、法二:php配置文件中不禁用exec方法

1)、找到php.ini文件位置

  • 使用命令php --ini,可以知道当前的php使用的配置文件位置,如下:
Configuration File (php.ini) Path: /www/web/php/72/etc
Loaded Configuration File:         /www/web/php/72/etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

2)、在php.ini文件中找到disable_functions配置并去除exec

  • php.ini文件中找到disable_functions配置,我们可以看到,exec确实被禁用了
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names.
; http://php.net/disable-functions
disable_functions = passthru,exec,system,chroot,chgrp,chown,popen,proc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
  • 去除exec,保存文件,如下:
disable_functions = passthru,system,chroot,chgrp,chown,popen,proc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru

3)、重启php服务

  • 重启PHP:service php-fpm restart
  • 如果提示权限不足, 请用:sudo service php-fpm restart
上一篇:Selenium启动Chrome时配置选项详解


下一篇:PHPStorm正在显示Symfony项目中注释中使用的导入的警告