8

我有一个站点(基于 ZEND 框架)并托管在 1and1 服务器上。

1and1 服务器使用 PHP 版本 5.2.17 和 5.4.5。我只需要对几个文件使用 PHP 5.4.5 版。这是因为如果我使用 PHP 5.4.5,我的其他一些文件会显示错误,但使用 PHP 5.2.17 可以正常执行。

在我的 .htaccess 文件中,下面的行是早先编写的以使用 PHP 5.2.17

AddType x-mapp-php5 .php

要使用 PHP 5.4.5,我必须使用下面的行(使用此代码的说明可在 1and1 常见问题页面上找到)

AddHandler x-mapp-php6 .php

常见问题网址:

有没有办法只对那些特定文件使用 PHP 5.4.5?

我尝试在 .htaccess 中使用以下行,但它不起作用:

AddType x-mapp-php5 .php
AddHandler x-mapp-php6 FilenameController.php

编辑

我试图编辑 5.2 代码。我正在使用 PEAR 包创建与 PHP 5.2.17 一起工作的 Excel 表,但在 PHP 5.4.5 上显示以下错误

致命错误:无法重新声明 _PEAR_call_destructors()

附录

.htaccess对文件的这种更改

AddType x-mapp-php5 .php 
AddHandler x-mapp-php6 .php6 
SetEnv APPLICATION_ENV development 
Options -MultiViews 
<IfModule mod_rewrite.c> 
  RewriteEngine On 
  RewriteBase / 

  RewriteRule ^FilenameController\.php$ FilenameController.php6  [L] 

  RewriteCond %{REQUEST_FILENAME} -s [OR]
  RewriteCond %{REQUEST_FILENAME} -l [OR] 
  RewriteCond %{REQUEST_FILENAME} -d 
  RewriteRule ^.*$ - [NC,L] 

  RewriteRule ^.*$ index.php [NC,L] 
</IfModule>

如果我将 FilenameController.php 的文件名更改为 FilenameController.php6 并且当我尝试访问其生成的页面时,会生成 404“找不到页面”错误。

4

2 回答 2

5

为什么不只是

AddHandler x-mapp-php6 .php6

并将您的 5.4 脚本重命名为 php6?您甚至可以通过在.htaccess 文件中执行以下操作来向用户隐藏它:

RewriteEngine On
RewriteBase   /
RewriteRule   ^FilenameController\.php$   FilenameController.php6 [L]

这对那个脚本文件的 .php6 扩展名做了内部指导。:-)

但是,让我强调一下:您只能根据每个请求而不是每个文件来选择要使用的脚本引擎。例如:http:/yourdomain.com/FilenameController.php将由 PHP 5.4 RTS 处理,所有包含的文件将使用 PHP 5.4 编译和执行;http:/yourdomain.com/index.php将由 PHP 5.2 RTS 处理,所有包含的文件都将使用 PHP 5.2 编译和执行。

您不能使用 5.4 编译应用程序中的文件,而使用 5.2 编译其余部分。

于 2012-08-18T00:55:24.713 回答
1

1and1 服务器使用 PHP 版本 5.2.17 和 PHP 版本 5.4.5。

我很好奇这件事的细节。

假设您将 php 作为 Apache 模块 (mod_php) 运行,您一次只能在同一个 Apache 安装上运行一个版本。您确定您的服务器甚至允许同时使用两者吗?更有可能的是,您可以重新启动 Apache 并让它以不同的版本运行。如果是这种情况,你不能真正配置你的出路,以免你想通过 cgi 设置 php。

于 2012-08-21T08:06:06.437 回答