使用 PHP Farm 激活 php 扩展的问题

Posted

技术标签:

【中文标题】使用 PHP Farm 激活 php 扩展的问题【英文标题】:Issue activating a php extension using PHP Farm 【发布时间】:2014-11-19 14:46:16 【问题描述】:

我正在实现一个需要 php 5.4 和 ZendGuard 6 (ZendGuard) 的软件 (Getsy)。

我使用的是 Ubuntu 14.04 的 AWS 实例。由于 Ubuntu 14.04 默认带有 PHP 5.5+,我需要安装 PHP 5.4。为此,我安装了 PHP Farm。

要在站点之间更改 PHP 版本,我有这个 cgi-bin 脚本:

#!/bin/sh
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/phpfarm/inst/bin/php-cgi-5.4.30

对于我的特定站点(站点更改为 ****),我在 /etc/apache2/sites-enabled/****.conf 中有此配置:

<VirtualHost *:80>
        ServerAdmin                 ...@...
        ServerName                  ****
        ServerAlias                 ****
        DocumentRoot                /var/www/****/public_html/
        ErrorLog                    /var/www/****/logs/error.log
        LogLevel                    warn
        CustomLog                   /var/www/****/logs/access.log combined
        <Directory />
                Options FollowSymLinks
                AllowOverride All
                AddHandler php-cgi .php
                Action php-cgi /cgi-bin-php/php-cgi-5.4.30
        </Directory>
</VirtualHost>

所以,当我运行我的网站的 phpinfo() 时,一切都很好,并且该网站使用 PHP 5.4.30 运行。

现在,我需要启用 ZendGuard Loader 扩展。我使用以下命令从here 下载 64 位 linux 版本:

cd ~
wget http://downloads.zend.com/guard/6.0.0/ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64.tar.gz
tar -xvf ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64.tar.gz
cd ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64
cd php-5.4.x
mv ZendGuardLoader.so /usr/lib/php5/ZendGuardLoader.so

因此,之后,为了安装 PHP 5.4.30,我创建了文件 custom-options-5.4.sh

#!/bin/bash

#gcov='--enable-gcov'
configoptions="--disable-debug \
--enable-short-tags \
--with-pear \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-wddx \
--enable-zip \
--with-zlib \
--with-gettext \
--enable-pdo \
--with-pdo-mysql \
--enable-cgi \
--enable-json \
--with-curl \
--with-gd \
--enable-gd \
--with-openssl \
--enable-openssl \
--with-mysql \
--enable-mysql \
$gcov"

我还使用了一个自定义的 php ini 文件作为custom-php.ini

include_path=".:/opt/phpfarm/inst/php-$version/pear/php/"
[Zend]
zend_extension="/usr/lib/php5/ZendGuardLoader.so"

之后,为了编译 PHP 版本,我使用了这个命令:

cd /opt/phpfarm/src/
./compile 5.4.30

所以,紧接着我得到了所有的输出并且 php 被正确安装了,但是当我在 /opt/phpfarm/inst/bin/php-5.4.30 -v 中检查 PHP 版本时,我得到了这个输出:

PHP 5.4.30 (cli) (built: Sep  3 2014 23:41:33)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

由于某种原因,它没有加载 ZendGuard 扩展。当我检查phpinfo() 时,ZendGuard 根本没有出现。当我检查/opt/phpfarm/inst/php-5.4.30/lib/php.ini 时,zend_extension="/usr/lib/php5/ZendGuardLoader.so" 行就在那里。

任何想法为什么它不加载扩展或我如何启用它?

【问题讨论】:

【参考方案1】:

我必须使用 --enable-xdebug 进行配置:

./configure --with-php-config=/opt/phpfarm/inst/bin/php-config-5.4.16 --enable-xdebug

【讨论】:

【参考方案2】:

显然一切正常,但由于某种原因,PHP 没有读取 php.ini 文件,并且没有反映任何更改。我所做的是我删除了inst/php-5.4.30 文件夹和src/php-5.4.30 文件夹,我修改了我的custom-options-5.4.sh 文件并添加了以下行:

--with-config-file-path=/opt/phpfarm/inst/php-5.4.30/lib/ \

之后我再次编译,重新启动 apache2,一切正常。我希望这对其他人有用:)。

啊,还有,现在php -v 的输出是这样的:

PHP 5.4.30 (cli) (built: Sep 26 2014 16:13:45)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies

【讨论】:

以上是关于使用 PHP Farm 激活 php 扩展的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使 .php 扩展名不出现在网站上? [复制]

SNMP 扩展使我的 php 5.6.7 和 5.6.10 (windows 8) 崩溃

yum 安装apache php 使php支持memcached扩展

怎样激活centos7中的php

使用PHP发送email进行账号激活或者密码修改操作

Mac OS X 需要 Mcrypt PHP 扩展