kus*_*tus 8 php windows iis-7 mysqli
我在PHP中开发了一个名为vishwasthali.org的网站,并在第三方服务器上将其托管在IIS7中.除了我使用MySQLi API 编写的数据库访问代码之外,其他所有工作都正常.代码在localhost上运行正常,但在服务器上运行不正常.使用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()服务器上的屏幕截图:

这是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
........
Run Code Online (Sandbox Code Playgroud)
使用echo get_class($mysqli);确实显示mysqli.这意味着,代码确实检测到了mysqli.但声明$stmt没有准备好.即使$mysqli->error;不显示任何错误,也可能是因为PHP在IIS上运行.
现在我有两个选择,要么更改数据库访问经典mysql API 的代码,要么通过从php.net下载最新的PHP二进制文件来升级服务器上的PHP和MySQLi版本.我不想选择第一个选项(这肯定有效),希望你知道为什么.后者不在我手中.想不出比这些更多的东西.
我想更换php_mysqli.dll可能会升级mysqli版本,不确定.但是PHP版本怎么样?
在这种情况下我该怎么办?在服务器上升级PHP和MySQLi版本会解决我的问题吗?如果是,是否会影响服务器上运行的其他PHP网站?
提前致谢.
行.这是解决方案.可以在IIS7中启用和并行运行不同的PHP版本.这是我在我的机器上成功测试的程序.考虑到您熟悉IIS和FastCGI,我只是简要介绍了这个过程.如果没有,请参阅链接:http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis'
打开所有文件夹中的php.ini文件,添加/取消注释并更改所有文件夹中的以下设置.
session.save_path ="C:\ Windows\Temp"
expose_php = Off
;; 在这里选择任何路径,但最喜欢的是这个
open_basedir ="C:\ inetpub\wwwroot"
extension_dir ="ext"
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
cgi.force_redirect = 0
;; 您可以为不同的网站选择不同的时区
date.timezone ="您的时区"
;; 启用每个网站所需的任何扩展名,例如
extension = php_mysql.dll
extension = php_mysqli.dll
打开IIS管理器.添加与要安装的PHP版本数一样多的Handler Mappings.只需在" 编辑模块映射"对话框中更改" 可执行文件"的路径即可.将Mappings命名为方便识别它们,如PHP 5.2.14通过FastCGI和PHP 5.4.3通过FastCGI.
在IIS管理器的IIS部分中,打开FastCGI设置.在这里,检查是否有与要运行的PHP版本数一样多的条目.如果没有,请单击右窗格中的" 添加应用程序 ".在"添加FastCGI应用程序"对话框的" 完整路径"字段中,从所需PHP版本的文件夹中选择一个php-cgi.exe.单击确定.
现在,将您的网站文件夹复制到C:\ inetpub\wwwroot或您在php.ini 中的open_basedir设置中选择的任何路径.在IIS管理器中,左窗格中的expant Sites-> Default Web Site.选择要定位到特定PHP版本的网站.
打开处理程序映射,从左窗格中选择一个网站.你会在这里找到很多映射.仅查看由您创建的条目(路径为*.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 对于您的情况来说不是正确的方法。您应该使用相应存储库提供的经过测试和批准的版本。
| 归档时间: |
|
| 查看次数: |
6541 次 |
| 最近记录: |