一、问题
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
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