exec php执行不了的解决办法:1、修改yii文件首行,直接指明php解释器;2、修改exec调用方法,直接指明php解释器。
本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。
php exec 为何执行不了?
有一个定时任务,想在 OSS 后台管理页面可以点击启动,可是试了几种方法都不行;无论 system 还是 exec(手工在 shell command line 执行没问题);最初怀疑 Web Server nginx 用户的权限问题,后来发现是环境变量找不到 php 可执行文件(因为 nginx 用户是受限用户);
exec("/home/app/example/api/app/yii demand/virtual {$id}", $output); print_r($output);
以上脚本执行后仅输出 Array()
,显然是没有执行到业务代码(业务代码的第一行就有输出);
// http://oss.example.com/index.php?r=demand/demand-ip/msg&id=1929 点击后执行 exec("/home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output); print_r($output);
以上脚本执行后有错误输出:Array ( [0] => /usr/bin/env: php: No such file or directory )
;
/usr/bin/env: php
这句话出自 yii 文件的首行 #!/usr/bin/env php
,本意是用于指明执行 yii 文件的 php 脚本解释器在哪里;可是错误输出/usr/bin/env: php: No such file or directory
说明找不到 php 在哪里;
【推荐学习:《PHP视频教程》】
#!/usr/bin/env php
修改为#!/usr/local/bin/php
,即直接指明 php 解释器所在位置(在代码发布时修改也可以);exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output); print_r($output);
$cmd = '/usr/local/bin/php /home/app/example/yapp/yii demand/finish 2057'; $pid_file = 'msgrepeat.pid'; $exec_cmd = sprintf("%s > /dev/null 2>&1 & echo $! > %s & cat %s", $cmd, $pid_file, $pid_file); exec($exec_cmd);
为安全起见,通常设置 nginx 用户的 shell 为 /sbin/nologin
定时任务和 OSS 后台管理页面上的点击操作之间的关系处理的一直不太好;
以上是exec php 执行不了怎么办的详细内容。更多信息请关注PHP中文网其他相关文章!