PHP向后兼容

时间:2015-03-16 08:20:18

标签: php mysql wamp wampserver backwards-compatibility

在运行针对目标PHP版本5.3编写的代码时遇到问题。目前我的PC上有PHP版本5.5.12。有没有办法在同一台机器上拥有更多版本,或者我该怎么办才能使这些代码运行得非常好。我在使用WAMP服务器。感谢

我试图关注这篇文章,但我不知道如何手动安装旧版本。 Article Link

3 个答案:

答案 0 :(得分:1)

WAMPServer优于所有其他WAMP Stack选项的最大优点是它可以支持多个版本的Apache / MySQL / PHP并允许您随意切换3个中的任何一个,假设编译器和链接之间的基本兼容性(一个当然,每一次都是。)

因此,假设您要使用与Apache 2.4兼容的PHP5.3版本(如5.3.28+),您需要手动将PHP版本安装到WAMPServer2.5中。

如何在手动环境中手动安装PHP的新版本

开始之前

在Apache和PHP上,您将看到缩写词VC6,VC9,VC10或VC11。这表示用于编译该程序或DLL的编译器版本。 不幸的是,当你在WAMPServer中配置Apache和PHP时,你不能混淆两者,尽管有些文档表明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"停止所有服务"。

HERE下载要安装的PHP版本,或者如果它不是The Achives的当前版本    您应该使用线程安全版本。通常,非线程安全版本具有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一起使用,因此您应该将文件更改为如此

<?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版本中的存在层次结构。

现在在新文件夹中复制文件&#39; php.ini_development&#39;进入名为&#39; php.ini&#39;

的新文件

再次执行相同操作,但粘贴到名为&#39; phpForApache.ini&#39;

的文件中

您现在应该拥有名为php.ini_development PLUS 2的原始文件,其中一个名为&#39; php.ini&#39;还有一个名为“phpForApache.ini&#39;

&#39; php.ini&#39;如果您使用的是PHP CLI,则使用该文件,即从命令行运行php&#39;&gt; php script.php&#39; phpForApache.ini是Apache使用的php配置。当您激活此版本的PHP时,此文件将复制到当前活动的Apache文件夹中,并由WAMPManager重命名为php.ini。

我们现在必须对php.ini文件进行一些更改以对它们进行WAMP。花点时间在这里,以后会节省您的时间。编辑新创建的&#39; phpForApache.ini&#39;文件并搜索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

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

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

从PHP5.4开始,需要设置时区 搜索&#39; timezone&#39;并在&#39; date.timezone&#39;中输入一个条目字段作为最低要求

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

在此处查看支持的时区值列表&#39; http://www.php.net/manual/en/timezones.php&#39;

PHP5.5特定更改

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

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

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

DONT FORGET,如果您使用的是PHP CLI,您还需要对php.ini文件执行此操作。

确保在wampmanager中停止所有服务,然后右键单击系统托盘中的wamp manager图标并选择“刷新”。菜单项。

当您左键单击wamp manager时 - > PHP - &gt;您应该在列表中看到新版本的版本。

如果没有出现新版本,那么您可能拼错了phpForApache.ini文件名。纠正它并重做&#39;刷新&#39;。

您现在可以重启所有服务&#39;来自wamp manager菜单。

注意:你还没有真正改变任何东西,所以如果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 manager图标应该再次变为GREEN。
  4. 如果wamp manager图标保持ORANGE,那么你错过了一些东西,可能是文件名拼错了。 phpForApache.ini文件必须存在。

    现在从wamp manager菜单运行localhost,然后检查wamp服务器主页。它应该告诉你加载了哪个版本的PHP。

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

    疑难解答 如果在激活新PHP时出现问题,只需激活之前使用的任何PHP版本,然后返回查看错误的内容,即可轻松摆脱麻烦。

    添加XDEBUG

    XDEBUG附带WAMP Server,对于调试CLI或WEB脚本非常有用。 但它没有附带从PHP网站下载的PHP。 将PHP升级到主要版本时,您可能需要从&#39; http://xdebug.org/download.php&#39;获取最新版本的xdebug。 对于次要版本升级,您可以使用磁盘上已有的现有xdebug版本。

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

    对于主要的PHP版本升级,从xdebug网站获取一个新的dll并将其放入一个名为&#39; c:\ wamp \ bin \ php \ php5.yz \ zend_ext&#39;

    现在在php.ini中添加这样一行(当然是特定版本的)(使用wamp manager菜单,确保编辑正确的文件)

    ;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"
    

答案 1 :(得分:0)

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

安装php-fpm

对于您的vhost条目,您必须添加

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(listener.owner / group / mode等)。

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

答案 2 :(得分:0)

在使用客户的过时cms

时遇到了同样的问题

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