PHP 向后兼容

PHP backward compatibility

为目标 PHP 版本 5.3 编写的代码遇到了问题 运行。目前我的 PC 上有 PHP 版本 5.5.12。有没有办法在同一台机器上拥有多个版本,或者我应该怎么做才能让这些代码 运行 完全正常。我正在使用 WAMP 服务器。谢谢

我试图按照这篇文章进行操作,但我被困在如何手动安装旧版本上。 Article Link

您可以在 apache 中安装 php 作为 fast-cgi 模块。所以每个 php 版本都有自己的进程,并为每个 vhost/directory.

调用

安装php-fpm

对于您的虚拟主机条目,您必须添加

AddHandler php5-fcgi .php
Action php5-fcgi /php5.fcgi
Alias /php5-fcgi /var/www/php5-fcgi
FastCgiExternalServer /var/www/php5.fcgi -socket /var/run/php5-fpm.sock

之后配置/etc/php5/fpm/pool.d/www.conf(监听器。owner/group/mode,等等)。

如果配置完成,请重新启动 php-fpm 和 apache

我在使用客户过时的 cms 时遇到了同样的问题

我用 Linux 安装了 VirtualBox(Ubuntu 发行版,但这是个人喜好) 然后我做了类似于 Philip 发布的内容。

WAMPServer 相对于所有其他 WAMP Stack 选项的最大优势在于它可以支持 Apache/MySQL/PHP 的多个版本,并允许您随意在 3 个版本之间切换,前提是编译器和链接之间具有基本兼容性(当然,任何时候各有一个)。

因此,假设您想使用与 Apache 2.4 兼容的 PHP5.3 版本,例如 5.3.28+,您需要做的就是手动将 PHP 版本安装到您​​的WAMPServer2.5.

如何将 PHP 的新版本手动安装到 WAMP 环境中

开始之前

在 Apache 和 PHP 上,您会看到缩写词 VC6、VC9、VC10 或 VC11。这表示用于编译该程序或 dll 的编译器版本。 不幸的是,当涉及到 Apache 和 PHP 时,您不能将两者混用,因为它是在 WAMPServer 中配置的,尽管一些文档表明 VC10 和 VC11 相互兼容,我不保证这一点。 所以首先你必须找出你当前使用的Apache是​​用哪个编译器编译的,这样你就可以得到用相同版本的编译器编译的PHP

随着时间的推移,这变得越来越复杂,因为新版本的 PHP 没有被编译并与旧版本的编译器链接。 VC6 好像前一阵子掉线了。因此,如果您想使用新的 PHP,您可能还必须升级您的 Apache 版本,以便您拥有一个至少使用 VC9

编译的版本

PHP 和 Apache 在默认 WAMPServer 安装中交互的方式是 Apache 将 PHP Interpereter 作为 dll (php5apachex_y.dll) 启动,因为这是一个非常密切的关系,即不是通过 PHP 和 MySQL 等 TCP 端口进行通信,因此它们都必须使用相同版本的 Microsoft Visual C 编译器进行编译。

来自 WampManager "Stop All Services"。

HERE or if its not a current release from The Achives 下载要安装的 PHP 版本 您应该使用线程安全构建。通常非线程安全版本有 acronim NTS,线程安全版本有 TS 或什么都没有。 您应该下载 ZIP 而不是 .msi 确保它使用与 Apache ( VC6 / VC9 / VC10 / VC11 ) 相同的编译器版本构建, 是的,这是一个雷区。但是,如果您使用的是 WAMPServer 2.5 或 >,那么您需要 VC11 线程安全版本,但使用 VC9 和 VC10 编译的版本也可能有效。

在 c:\wamp\bin\php\ 下创建一个新文件夹,名称 = 您正在安装的版本,例如,创建一个名为 php5.5.11.

的文件夹

现在从包含您最新(和工作)版本的 PHP 的文件夹中复制名为 wampserver.conf 的文件并将其粘贴到您在之前的设置中创建的新 PHP 文件夹中. wamp 服务器需要此文件才能正确识别这是一个有效的 PHP 版本文件夹。该文件包含对包含 PHP 解释器的 dll 文件名称的引用,因此当您激活这个新版本的 PHP 解释器时,可以将正确的文件复制到 Apache 文件夹。

该文件应如下所示,如果您从非常旧的版本 PHP 迁移,您可能需要从此处向您的文件添加一些新部分。

<?php
$phpConf['phpIniDir'] = '.';
$phpConf['phpExeDir'] = '.';
$phpConf['phpConfFile'] = 'php.ini';

$phpConf['apache']['2.2']['LoadModuleName'] = 'php5_module';
$phpConf['apache']['2.2']['LoadModuleFile'] = 'php5apache2_2.dll';
$phpConf['apache']['2.2']['AddModule'] =  '';

$phpConf['apache']['2.4']['LoadModuleName'] = 'php5_module';
$phpConf['apache']['2.4']['LoadModuleFile'] = 'php5apache2_4.dll';
$phpConf['apache']['2.4']['AddModule'] =  '';
?>

PHP 的较新版本,即 PHP6.5 及更高版本未编译为与 Apache 2.2 一起使用,因此您应该将文件更改为类似于 This

<?php
$phpConf['phpIniDir'] = '.';
$phpConf['phpExeDir'] = '.';
$phpConf['phpConfFile'] = 'php.ini';

$phpConf['apache']['2.4']['LoadModuleName'] = 'php5_module';
$phpConf['apache']['2.4']['LoadModuleFile'] = 'php5apache2_4.dll';
$phpConf['apache']['2.4']['AddModule'] =  '';
?>

现在将下载的 PHP 解压到您的新文件夹中,确保文件夹层次结构与 PHP 现有版本中的现有层次结构相似。

现在在您的新文件夹中将文件 'php.ini_development' 复制到一个名为 'php.ini'

的新文件中

再次执行相同操作,但粘贴到名为 'phpForApache.ini'

的文件中

您现在应该有一个名为 php.ini_development 的原始文件加上另外 2 个文件,一个名为 'php.ini' 和一个名为 'phpForApache.ini'

如果您使用 PHP CLI,即从命令行 运行ning php,则使用 'php.ini' 文件 '> php script.php' phpForApache.ini 是 Apache 使用的 php 配置。当您激活此版本的 PHP.

时,此文件将复制到当前活动的 Apache 文件夹中并由 WAMPManager 重命名为 php.ini

我们现在必须对 php.ini 文件进行一些更改以对它们进行 WAMPise。花点时间在这里它会节省你以后的时间。编辑新创建的 'phpForApache.ini' 文件并搜索 extension_dir 并更改为

extension_dir = "d:/wamp/bin/php/phpx.y.z/ext/"  <- where x,y,z match the folder you are putting the new PHP into.

搜索

error_log = php_errors.log 

并改为

error_log = c:\wamp\logs\php_errors.log

搜索任何内容 'php/' 并确保将其更改为您的 c:\wamp\bin\php\php.x.y.z 文件夹名称。

实际上,搜索任何带有 C:\ 的内容,并确保将其更改为等效的 WAMPServer。

自PHP5.4起需要设置时区 搜索 'timezone' 并在 'date.timezone' 字段中至少输入一个条目

date.timezone = "Europe/London"
date.default_latitude = 0.0
date.default_longitude = 51.502973

在此处查找支持的时区值列表“http://www.php.net/manual/en/timezones.php

PHP5.5 具体改动

所有 PHP 扩展都被注释掉了,因此您需要手动取消注释至少其中的一些

检查你最后使用的 php.ini 看看你需要什么,记住一些扩展可能已经包含在 php 的核心中所以你可能需要检查 php 更改日志了解详情。

现在您可能对现有 PHP 进行了其他配置更改,这些您必须自己查找并传输。 我建议您将上一个 \wamp\bin\apache\apachex.y.z\bin\php.ini 与这个新的进行比较,然后移动您认为相关的任何内容。

不要忘记,如果您使用 PHP CLI,您还需要对 php.ini 文件执行此操作。

确保 wampmanager 中的所有服务都已停止,然后右键单击系统托盘中的 wamp 管理器图标和 select 'refresh' 菜单项。

当您左键单击 wamp 管理器 -> PHP -> 版本时,您应该会在列表中看到您的新版本。

如果没有出现新版本,那么您可能拼错了 phpForApache.ini 文件名。更正它并重做 'refresh'.

您现在可以从 wamp 管理器菜单'restart all services'。

注意:你实际上还没有改变任何东西,所以如果 WAMPServer、Apache、PHP 等在它们仍然应该工作之前工作。

激活您的新 PHP 版本。

再次使用 wamp 管理器菜单,您只需单击新版本号即可激活它。

wamp manager -> PHP -> Version -> 5.5.11 <- or whatever the version number is you have just added

这将导致 wamp 管理器:-

  1. 停止 Apache(图标将变为橙色)
  2. 将正确的文件从 PHP 文件夹复制到 Apache 文件夹,或者如果您使用的是 WAMPServer 2.5 或更高版本 在 apachex.y.z/bin 文件夹中创建正确的 SYMLINK。
  3. 重新启动 Apache。所以 wamp 管理器图标应该再次变为绿色。

如果 wamp 管理器图标保持橙色,那么您错过了一些东西,可能是文件名拼写错误。 phpForApache.ini 文件必须存在。

现在从 wamp 管理器菜单 运行 localhost,并检查 wamp 服务器主页。它应该会告诉您加载了哪个版本的 PHP。

[img]http://derp.co.uk/27aaf[/img]

疑难解答 如果在您激活新的 PHP 时一切都出错了,您只需激活您之前使用的任何版本的 PHP,然后返回查看您做错了什么,即可轻松摆脱困境。

添加 XDEBUG

XDEBUG 随 WAMP 服务器一起提供,对于调试 CLI 或 WEB 脚本非常有用。 但它不包含您从 PHP 网站下载的 PHP。 将 PHP 升级到主要版本时,您可能需要从“http://xdebug.org/download.php”获取最新版本的 xdebug 对于次要版本升级,您可能可以使用磁盘上已有的现有 xdebug 版本。

因此,对于较小的 PHP 版本升级,请将文件夹 'c:\wamp\bin\php\php5.y.z\zend_ext' 从旧的 PHP 复制到新的 php 文件夹。

对于主要的 PHP 版本升级,从 xdebug 网站获取一个新的 dll 并将其放入新创建的名为 'c:\wamp\bin\php\php5.y.z\zend_ext'

的文件夹中

现在向您的 php.ini 添加这样一行(当然是特定于版本的)(使用 wamp 管理器菜单,以确保您正在编辑正确的文件)

;XDEBUG Extension
zend_extension = "d:/wamp/bin/php/phpx.y.z/zend_ext/php_xdebug-2.2.2-5.3-vc9.dll"

[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "d:/wamp/tmp"