如何同时在IIS上运行多个版本的PHP

我在PHP中开发了一个名为vishwasthali.org的网站,并在第三方服务器的IIS7中托pipe了它。 除了我使用MySQLi API编写的数据库访问代码之外,其他一切工作都正常。 该代码在本地主机上正常工作,但不在服务器上。 在服务器和我的机器上使用phpinfo() ,我发现:

(1)在我的机器上(运行在Windows 7 32位,Apache宿主环境中),PHP版本是5.3.8 ,而mysqli版本是5.0.8-dev

(2)在服务器(运行于Windows Server 2008,IIS7宿主环境)上,PHP版本为5.2.14 ,mysqli版本为5.0.51a


以下是我机器上phpinfo()的屏幕截图: 在这里输入图像说明在这里输入图像说明


以下是服务器上phpinfo()的屏幕截图: 在这里输入图像说明在这里输入图像说明


这里是mysqli代码的示例。

 session_start(); include_once 'code_files/conn.php'; $stmt = $mysqli->prepare('SELECT * FROM adminusers WHERE Username = ? AND `Password` = ?'); $stmt->bind_param('ss', $_POST['Username'], $_POST['Password']); $stmt->execute(); $result = $stmt->get_result(); if($result->num_rows > 0) ........ else ........ 

使用echo get_class($mysqli); 显示mysqli 。 这意味着,代码确实检测到mysqli。 但是$stmt语句没有准备好。 即使是$mysqli->error; 不显示任何错误,可能是因为PHP正在IIS上运行。

现在我有两个select,可以将数据库访问的代码更改为传统的mysql API,也可以通过从php.net下载最新的PHP二进制文件来升级服务器上的PHP和MySQLi版本。 我不会喜欢与第一个选项(这绝对有效),希望你知道为什么。 后者不在我手中。 想不到比这些更多。

我猜想更换php_mysqli.dll可能会升级mysqli版本,不知道。 但是PHP版本呢?

在这种情况下我能做些什么。 服务器上PHP和MySQLi版本的升级是否可以解决我的问题? 如果是,是否会影响服务器上运行的其他PHP网站?

提前致谢。

Solutions Collecting From Web of "如何同时在IIS上运行多个版本的PHP"

好吧。 这是解决方案。 不同的PHP版本可以启用并在IIS7中并行运行。 这是我在我的机器上测试过的程序。 考虑到你熟悉IIS和FastCGI,我只是简单介绍一下这个过程。 如果没有,请参阅链接: http : //learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis'

  1. http://www.php.net/downloads.php下载任何不同版本的非线程安全的压缩包与PHP的二进制文件。
  2. 将它们解压到像C:\ PHP5.2.14C:\ PHP5.4.3等硬盘中的文件夹
  3. 打开所有文件夹中的php.ini文件,并添加/取消注释,并在所有文件夹中更改以下设置。

    session.save_path =“C:\ Windows \ Temp”
    expose_php =关闭
    ;; 在这里选择任何路径,但最主要的是这个
    open_basedir =“C:\ inetpub \ wwwroot”
    extension_dir =“ext”
    fastcgi.impersonate = 1
    cgi.fix_pathinfo = 1
    cgi.force_redirect = 0
    ;; 您可以为不同的网站选择不同的时区
    date.timezone =“你的时区”
    ;; 启用任何你想要在每个网站的扩展,例如
    延长=激活php_mysql.dll
    延长= php_mysqli.dll

  4. 打开IIS管理器 。 添加与您要安装的PHP版本数量一样多的Handler Mappings。 只需在“ 编辑模块映射”对话框中更改“ 可执行文件”的路径即可。 将Mappings命名为便于识别它们,比如通过FastCGI的PHP 5.2.14通过FastCGI的 PHP 5.4.3

  5. 在IIS管理器的IIS部分中,打开FastCGI设置 。 在这里,检查是否有尽可能多的条目作为你想运行的PHP版本的数量。 如果不是,请单击右窗格中的添加应用程序 。 在“添加FastCGI应用程序”对话框的“ 完整路径”字段中,从所需PHP版本的文件夹中选择一个php-cgi.exe 。 点击OK。

  6. 现在,将您的网站文件夹复制到C:\ inetpub \ wwwroot或者您在php.ini中的open_basedir设置中选择的任何路径。 在IIS管理器中,从左侧窗格展开Sites-> Default Web Site。 选择您想要定位到特定版本的PHP的网站。

  7. 打开处理程序映射 ,从左窗格中选择一个网站。 你会在这里找到许多映射。 只查看已经创建的条目(那些路径为* .php的条目)。 其中,保留唯一的一个你需要的特定的网站选择和删除其他人。 这不会删除您的机器映射,但只能从选定的网站删除。 您的网站现在只会在您保留的映射的PHP版本上运行。 对于任何想要定位到特定PHP版本的网站都要这样做。 您可以通过在网站中运行phpinfo()来测试它。

将新网站添加到wwwroot后 ,它们将不会附加任何处理程序。 添加一个新的处理程序,目标是所需的PHP版本。 你完成了。

这可能不是最好的程序。 但是它为我工作。 要进行验证,请参阅以下链接:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis/#PHP_Versioning”

希望它有帮助,以防有人需要这个。

问候

这里有一些相当错误的东西!

a)您的开发环境与您的现场的区别太大了! 至少使用相同的Web服务器和相同的PHP 5.x版本!

b)从不公开使你的phpinfo()可访问,这是一个非常大的安全风险! 黑客可以从中获取大量信息。

c)即使在使用准备好的语句时,在查询中使用它之前,您也应该清理您的用户数据!

我不认为你的问题与不同的mysqli版本有什么关系。 也许你应该首先确保你在这两种环境下使用相同的Web服务器和PHP版本,然后再次询问更多的代码(例如,如何建立连接),如果它仍然不起作用。

是的,更新PHP可以影响服务器上的其他项目,但这意味着你需要更新这些项目,你应该这样做!

不,从php.net下载PHP不是正确的方式在你的情况。 您应该使用各自存储库提供的经过测试和认可的版本。