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

0qx6xfy6  于 11个月前  发布在  PHP
关注(0)|答案(3)|浏览(132)

我用PHP开发了一个名为vishwasthali.org的网站,并将其托管在第三方服务器上的IIS 7中。除了我使用MySQLiAPI编写的数据库访问代码之外,其他一切都很好。代码在本地主机上工作正常,但在服务器上不工作。在服务器和我的机器上使用phpinfo(),我发现:
(1)在我的机器上(运行在Windows 7 32位,Apache托管环境中),PHP版本为5.3.8,mysqli版本为5.0.8-dev
(2)在服务器(运行于Windows Server 2008,IIS 7托管环境)上,PHP版本为5.2.14,mysqli版本为5.0.51a
以下是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上运行。
现在我有两个选择,要么将数据库访问代码更改为经典的mysqlAPI,要么通过从php.net下载最新的PHP二进制文件来升级服务器上的PHP和MySQLi版本。我不喜欢第一种选择(肯定有效),希望你知道为什么。后者不在我手中。我只能想到这些。
我想替换php_mysqli. dll可能会升级mysqli版本,不确定。PHP版本怎么样?
在这种情况下我能做什么。升级服务器上的PHP和MySQLi版本能解决我的问题吗?如果是,它会影响服务器上运行的其他PHP网站吗?
先谢了。

wtzytmuj

wtzytmuj1#

好吧。解决办法是。不同的PHP版本可以在IIS 7中启用并并行运行。这是我在我的机器上成功测试的过程。我只是简单介绍一下这个过程,考虑到你熟悉IIS和FastCGI。如果没有,请查看链接:http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis'
1.从http://www.php.net/downloads.php下载任何不同版本的非线程安全zip包,其中包含PHP二进制文件。
1.将它们解压缩到硬盘中的单独文件夹中,如C:\PHP5.2.14C:\PHP5.4.3等。
1.打开所有文件夹中的php.ini文件,并在所有文件夹中添加/取消注解和更改以下设置。
session.save_path =“C:\Windows\Temp”
expose_php = Off
;;在这里选择任何路径,但最受欢迎的是
打开_basedir =“C:\inetpub\www root”
extension_dir =“ext”
fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
;;您可以为不同的网站选择不同的时区
date.timezone =“您所在的时区”
;;启用任何扩展,你想每个网站,例如。
扩展名=php_mysql.dll
扩展名=php_mysqli.dll
1.打开IIS管理器。添加与您要安装的PHP版本数量一样多的PHPMap。只需在【编辑模块Map】对话框中修改【可执行文件】的路径即可。将Map命名为便于识别,例如PHP 5.2.14 via FastCGIPHP 5.4.3 via FastCGI
1.在IIS管理器的IIS部分,打开FastCGI设置。在这里,检查是否有与您想要运行的PHP版本数量一样多的条目。如果没有,请单击右窗格中的【添加应用程序】。在“添加FastCGI应用程序”对话框的Full Path字段中,从所需PHP版本的文件夹中选择php-cgi.exe。单击“确定”。
1.现在,将您的网站文件夹复制到C:\inetpub\wwwroot或您在php.ini的open_basedir设置中选择的任何路径。在IIS管理器中,从左窗格中扩展站点->默认网站。选择您要针对特定PHP版本的网站。
1.打开MapMap,从左侧窗格中选择一个网站。你会在这里找到许多Map。只寻找那些已经被你创建的条目(那些路径为 *.php的条目)。其中,保留您所选择的特定网站所需的唯一一个,并删除其他。这不会从你的机器上删除Map,而只会从所选的网站上删除。您的网站现在将仅在您保留了其Map的PHP版本上运行。对任何你想定位到特定PHP版本的网站执行相同的操作。您可以在网站上运行phpinfo()进行测试。
在您将新网站添加到
wwwroot**后,它们不会附带任何处理程序。添加一个针对所需PHP版本的新处理程序。你完了
这可能不是最好的程序。但对我很有效。有关验证,请参阅此链接:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis/#PHP_Versioning'
希望它能帮上忙,以防有人需要它。
问候

bttbmeg0

bttbmeg02#

这里有几件事很不对劲!
a)您的开发环境和您的现场站点之间的差异太大!至少使用相同的Web服务器和相同的PHP 5.x版本!
B)永远不要公开你的phpinfo(),这是一个非常大的安全风险!黑客可以从中获取大量重要信息。
c)即使在使用预处理语句时,也应该在查询中使用用户数据之前对其进行清理!
我不认为你的问题与不同的mysqli版本有关。也许你应该首先确保你在两个环境中使用相同的web服务器和php版本,然后用更多的代码再次询问,(例如。如何建立连接),如果它仍然不起作用。
是的,更新PHP会影响服务器上的其他项目,但这只是意味着你需要更新这些项目,无论如何你都应该这样做!
不,从www.example.com下载PHPphp.net在你的情况下不是正确的方法。您应该使用由各自的存储库提供的测试和批准的版本。

s4n0splo

s4n0splo3#

如何在IIS中运行多版本PHP

必备条件

在本文中,我假设您已经安装了IIS,并且至少在您的机器上安装了一个PHP,并且所有必要的配置都已到位,以支持安装的PHP版本之一。
如果没有,请按照说明How to Host PHP on Windows With IIS操作
但请记住,Windows Platform Installer将于2022年12月31日退役,您需要从PHP official website下载并修改php.ini。
我认为你有两个PHP C:\PHP7.4C:\PHP8.2

配置IIS,添加PHP版本

打开IIS管理器

  • 在左窗格中,导航到服务器节点
  • IIS部分下,打开FastCGI Settings
  • 单击添加应用程序.并为两个版本选择PHP

配置站点

在IIS的左侧面板中,单击站点并添加两个站点,每个站点指向两个不同版本的PHP的不同目录(网站根目录)。

对于每个站点,单击绑定并给予不同的端口号(例如:740和820)
对于每个站点,单击Handler Mappings,然后单击Add Module Mapping...

  • 请求路径:*.php
  • 模块:FastCgiModule
  • 可执行文件:浏览到正确的PHP版本(例如,C:\PHP7.4\php-cgi.exe
  • 输入名称
  • 请求限制>文件或文件夹

测试

在每个根目录下创建index.php文件包含:

<?php
phpinfo();

打开浏览器:

相关问题