CentOS 6.8 PHP-FPM 无法与 PHP CLI 一起正常工作

Posted

技术标签:

【中文标题】CentOS 6.8 PHP-FPM 无法与 PHP CLI 一起正常工作【英文标题】:CentOS 6.8 PHP-FPM not working correctly with PHP CLI 【发布时间】:2017-01-10 13:15:38 【问题描述】:

我最后一天用谷歌搜索了这个,要么我的 Google-Fu 过得不好,要么之前没有人问过这个问题。

在过去的几天里,我一直在用 CentOS 6.8 设置一个 Vagrant VM,以便我在我们的网站上工作。我决定在我们的实时服务器上安装相同的软件包:nginxphp-FPM 和 Percona。我在 remi repo 中删除了 PHP 5.3 并启用了 5.6,目前已安装:

php.x86_64 (5.6.25-1.el6.remi) php-cli.x86_64 (5.6.25-1.el6.remi) php-common.x86_64 (5.6.25-1.el6.remi) php-fpm.x86_64 (5.6.25-1.el6.remi) php-mbstring.x86_64 (5.6.25-1.el6.remi) php-mcrypt.x86_64 (5.6.25-1.el6.remi) php-mssql.x86_64 (5.6.25-1.el6.remi) php-mysqlnd.x86_64 (5.6.25-1.el6.remi) php-pdo.x86_64 (5.6.25-1.el6.remi) php-pecl-jsonc.x86_64 (1.3.10-1.el6.remi.5.6) php-pecl-zip.x86_64 (1.13.4-1.el6.remi.5.6) php-xml.x86_64 (5.6.25-1.el6.remi)

现在我还没有意识到任何问题,因为网站运行得非常好。但是今天我去重新索引站点,我们使用的是 Magento,所以我出于偏好通过 CLI 进行。命令是:

php indexer.php reindexall

所有这些输出是:

用法:php [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p ] [-g ] [-c ] [-d foo [=bar]] [-y ] [-D] [-F [-O]]
    -c |在此目录中查找 php.ini 文件
    -n 不使用 php.ini 文件
    -d foo[=bar] 定义 INI 条目 foo,值为 'bar'
    -e 为调试器/分析器生成扩展信息
    -h 这个帮助
    -i PHP 信息
    -m 显示编译在模块中
    -v 版本号
    -p,--前缀
                   指定 FastCGI 进程管理器的替代前缀路径(默认值:/usr)。
    -g,--pid
                   指定 PID 文件位置。
    -y,--fpm-配置
                   指定 FastCGI 进程管理器配置文件的替代路径。
    -t, --test 测试 FPM 配置并退出
    -D, --daemonize 强制在后台运行,并忽略配置文件中的 daemonize 选项
    -F, --nodaemonize
                   强制停留在前台,并忽略配置文件中的守护进程选项
    -O, --force-stderr
                   即使 stderr 不是 TTY,在 nodaemonize 中强制输出到 stderr
    -R, --allow-to-run-as-root
                   允许池以 root 身份运行(默认禁用)

我从未见过这种情况发生。终端甚至日志中都没有错误。我尝试了其他 php 脚本,甚至创建了一个我知道会运行的非常简单的“hello world”测试,但仍然得到相同的输出。所以我做了一些挖掘,过了一会儿注意到我的php -v 显示PHP 5.6.25 (fpm-fcgi) 而不是PHP 5.6.25 (cli)

我尝试删除 php-fpm 包,然后修复了 php -v 的输出,并启用了我的简单测试脚本,但这并不是真正的修复,因为这让我没有 php-fpm。

我真的希望这只是我错过的一个简单设置,因为它显然在我们的实时服务器上运行良好。我确实询问了我们的主机支持,他们以前也没有见过。

所以,在所有这些背景之后,我想一个简短的问题是如何安装 php-fpm 而不会与 php-cli 冲突?

【问题讨论】:

当您想查看别名(软链接)指向的位置时,可以这样使用:which php 我猜输出类似于/usr/bin/php5-fpm - 这是客户端/控制台使用的错误 SAPI 二进制文件. @DanFromGermany 它输出为/usr/sbin/php,但如果我执行/usr/bin/php 并且该命令有效 【参考方案1】:

我不明白你的 /usr/sbin/php 来自哪里

# rpm -q php-cli php-fpm
php-cli-5.6.25-1.el6.remi.x86_64
php-fpm-5.6.25-1.el6.remi.x86_64

# which php
/usr/bin/php

# php -v
PHP 5.6.25 (cli) (built: Aug 31 2016 19:26:19) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

# rpm -qf /usr/sbin/php
error: file /usr/sbin/php: No such file or directory

所以你可以直接删除它。

【讨论】:

【参考方案2】:

尝试使用所需 PHP 可执行文件的完整路径。比如:

/usr/bin/php indexer.php reindexall

【讨论】:

谢谢!这使脚本运行。我试过/usr/sbin/php,因为那是which php给我的,但没有想到/usr/bin/php。有没有办法让它只使用php?如果你能给我指明一个方向,我会先看看我能在 Google 中找到什么,但如果不是,我想我总是可以只使用别名。 /usr/sbin 通常只能由 root 访问。如果您输入 ls -l /usr/sbin/php 会看到什么?如果它只是一个符号链接,那么我认为您可以安全地取消链接,然后使用 ln -s /usr/bin/php /usr/sbin/php 重新链接这样,您之前的所有 CLI 调用应该仍然有效! 这是我得到的:lrwxrwxrwx. 1 root root 17 Aug 24 16:05 /usr/sbin/php -> /usr/sbin/php-fpm,重新链接是否仍然安全? 您可能需要在创建符号链接后使用chmod 777 /usr/sbin/php。我不确定这是否可行,因为我认为 php-fpm 以 777 权限安装在 /usr/sbin/ 中很奇怪。如果有任何问题,您可以随时重新链接到 /usr/sbin/php-fpm. ,然后再链接到另一个 chmod 777 /usr/sbin/php 以恢复到原来的情况。 本,你是个传奇,谢谢。取消链接并执行ln -s /usr/bin/php /usr/sbin/php 工作正常。我做了chmod 777 /usr/sbin/phpservice php-fpm restart 以防万一。 php -v 现在显示 PHP 5.6.25 (cli) 并且该站点仍然运行良好

以上是关于CentOS 6.8 PHP-FPM 无法与 PHP CLI 一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

我无法让 Vhost 在 centos 6.8 上托管多个 wordpress 网站

CentOS 6.8 光盘安装与登录

CentOS 6.8部署Nuxt.js项目(CentOS nuxt.js项目无法通过公网IP访问的问题)

CentOS 6.8 安装 Python3

CentOS 6.8不重启在线增加硬盘

CentOS 6.8使用bind搭建内网DNS主从服务