Maison  >  Article  >  php教程  >  修复一个 PHP 配置故障

修复一个 PHP 配置故障

WBOY
WBOYoriginal
2016-06-06 19:55:08936parcourir

故障现象: 在 Windows Server 2003+IIS6.0 环境下,原先配置好的 PHP5.0.4可以正常工作。但在同一台机器上,Apache2.2.8+PHP5.2.5下正常运行的代码,在 IIS 下不能正确执行 exec()函数。比如,exec(cd,$arr,$ret) 语句,其执行结果,$arr 数组的值应该是包

    故障现象:

    在 Windows Server 2003+IIS6.0 环境下,原先配置好的 PHP5.0.4 可以正常工作。但在同一台机器上,Apache2.2.8+PHP5.2.5下正常运行的代码,在 IIS 下不能正确执行 exec() 函数。比如,exec(’cd’,$arr,$ret) 语句,其执行结果,$arr 数组的值应该是包含该语句的 php 文件做在的 Windows 路径,但结果却是“C:/Windows”文件夹。并且不能正确执行其他外部 exe 程序。

    诊断:

    IIS 配置里,已经开放 isapi 扩展允许。
    Windows/system32/cmd.exe 已经加过 IUSR_… 账户权限。
    要执行的外部 exe 程序,已经拷贝到 Windows/system32 文件夹下,也已经加过 IUSR_… 账户权限。
    网站所在的文件夹,已经赋予 IUSR_… 账户权限。

    怀疑是 PHP 版本过低,或哪里权限不够导致该问题。

    (1)升级 PHP5.0.4 到 5.2.5
    Windows 的全局 Path 变量配置指向 PHP5.2.5 文件夹。PHP5.2.5 的 php.ini 文件拷贝到 Windows 文件夹下。网站的 .php 映射指向到 PHP5.2.5 文件夹下的 php5isapi.dll。重启 IIS 后,打开网站,弹出一个提示框,提示需要输入用户名和密码,输入 Windows 的 Administrator 账户和密码后,仍不能打开网站。
    这时想到,给网站所在文件夹加上 User 账户的读取和执行权限试一下。执行该操作后,不再弹出要求账户和密码的对话框,可以打开网站的下级页面(这一步至关重要)。但不能打开首页,可能是因为首 页调用了数据库连接的原因。这时能打开测试 exec() 函数的 php 页面,结果仍然不正确。
    这时怀疑是已经起作用的 PHP5.0.4 的文件和 5.2.5 相冲突。果然,在 Windows/system32 文件夹下发现原 5.0.4 的所有 .dll 文件,包括 PHP5.0.4 文件夹下和 PHP5.0.4/ext 下的 .dll 文件,都被拷贝到了这里!(注意,这不是必须的,是听信某些“教程”的教唆而这么做的。但既然拷贝到了这里,可能已经其作用了。)于是,把 IIS 和 Apache 服务关闭,把 PHP5.2.5 的所有 dll 文件也拷贝到这里(入乡随俗、如法炮制)。再启动机器–启动机器是因为让 Windows 重新加载最新的 .dll 文件。这时,PHP 因该是全套升级到了 5.2.5 版本了。

    启动机器后,报错“No input file specified”,看来有门,因为错误信息已经变化了,说明前述的配置在生效了。在网上搜索产生该错误信息的原因,提示“在 IIS 的 ISAPI 模式下出现‘No input file specified’信息,只要把 php.ini 里的 doc_root = ……注释掉就可以了”,照此提示,在 php.ini 里的 doc_root = …… 语句前加个分号,注释掉语句,再重新启动 IIS。全好了!

    注意, doc_root = …… 语句在 php.ini 里一般是“doc_root =”,就是值是空的。但因为我的 php.ini 文件是从与 Apache 配合的 PHP 文件夹拷贝过来的,可能在安装 Apache 时,Apache 赋了一个值。其实把该值设为空的,应该和和注释掉的效果相同。这里不是关键的地方,仅仅是一个小插曲而已。

    结论:

    问题解决了。但不能确定是因为给网站所在文件夹加上了 User 账户的权限,还是因为升级 PHP,而导致问题的解决的。总之,肯定是上述2个操作的某一把问题解决了,但不能确定是哪一个?应该不是因为2个操作同时起作用的吧,感觉不是,没有理由。

    还有一个收获,就是,Windows 很多问题是因为权限配置引起的,所以,告诫那些外行系统管理员,请不要随便加上或去除文件夹的的权限,从而引起系统的安全性降低和意外故障。再注意,配置 系统也要做好记录,并及时测试该配置结果对系统的影响,不要哪天发现系统不对劲,还不知道是哪个配置引起的。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn