• 技术文章 >后端开发 >PHP问题

    exec php 执行不了怎么办

    藏色散人藏色散人2021-03-01 09:34:08原创514

    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视频教程》】

    解决方案
    exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output);
    print_r($output);
    504 错误
    $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);
    关于 /usr/bin/env(可移植性高?)
    nginx 用户

    为安全起见,通常设置 nginx 用户的 shell 为 /sbin/nologin

    定时任务和 Web 操作的关系?

    定时任务和 OSS 后台管理页面上的点击操作之间的关系处理的一直不太好;

    1. yii 框架 console 和 web 的两种处理方式;
      如何提升 crontab 可测试性的问题;
      如何改善 crontab 使用体验的问题;
      如何合理复用 crontab 任务和 API(Controller/Action)代码的问题;
    2. 前台和后台共享 Controller/Action 的方式;
      或者说多项目之间方便共享代码库的问题;
    启示

    以上就是exec php 执行不了怎么办的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:exec php
    上一篇:php 怎么将word转为图片 下一篇:php如何将富文本内容转义
    大前端线上培训班

    相关文章推荐

    • PHP 怎么去掉头尾字符• php parent是啥• php 怎么实现去除emoji• php 怎么去除尾部字符• php 怎么将word转为图片

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网