No input file specified.错误的解决

今天改过服务器的php.ini文件后,发现所有的页面都不能访问,显示为:“No input file specified.”

由于要同时支持.NET,服务器采用的是IIS。我改用Apache就没有这个问题。

这个问题很让人头疼。google了一阵之后没有找到好的方法。大都是说因为CGI的安全认证问题,而使用ISAPI模块方式安装PHP则没有这个问题。可是我恰恰就是用ISAPI模块方式安装的,为什么还有这个问题?

在微软的网站找到这篇文章How IIS launches a CGI application,里面讲到在注册表中添加CreateProcessAsUser值的方法(如下):

NOTE: The following is the full path to the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
W3SVC\Parameters

• Modify the registry to run all applications as the system.

Under the W3SVC/Parameters, place the value CreateProcessAsUser as a REG_DWORD and give it a value of 0. This causes the CGI to be ran with the CreateProcess API and run in the system context. This has serious security implications because CGI scripts will have much greater access to the system than they normally would.

我照上面的说明添加了,仍然没有用。

于是把ISAPI删除,改成CGI模式安装PHP,然后修改PHP.ini文件中的cgi.force_redirect值为0,重启IIS。错误依旧。

到现在,我大致已经知道出现这个错误可能是因为没有找到PHP ISAPI模块的DLL文件,但是我配置的所有路径都正确呀!

接着试验。禁用IIS6中的php扩展,此时访问网站出现404错误。为什么会出现404错误?这是没有找到网页文件的错误呀!看来可能是配置问题了。

想起来刚才改过PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS,一切正常了。

其实,在虚拟主机中配置php.ini中的doc_root,实际上没有什么意义,因为提供虚拟主机的IIS,一般都不会有实际的doc_root,而是每个虚拟主机一个root。我煞费苦心的跑去设置doc_root,实在是多此一举,浪费表情 :roll:。