【问题标题】:How to set the php.ini path for PHP CGI/FastCGI SAPI on Windows Server 2008 r2?如何在 Windows Server 2008 r2 上设置 PHP CGI/FastCGI SAPI 的 php.ini 路径?
【发布时间】:2016-11-25 00:14:55
【问题描述】:

我的 Microsoft Windows Server 2008 Standard 6.0 SP2 上有 IIS 7.0 和两个版本的 PHP v5v7。问题是,PHP7 或 IIS 试图将 PHP5 的 php.ini 用于 IIS“网站”。

所以在命令行上一切正常:

X:\>php -v
PHP 7.0.2 (cli) (built: Jan  6 2016 12:59:59) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

X:\>php --ini
Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         D:\Data\Programme\php7\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

但在 IIS 管理器和phpinfo() 输出中没有:

我认为,这是一个 PHP (cgi-fcgiSAPI) 问题,不是一个 IIS 问题(但不确定)。

如何在 Windows Server 2008 上为 PHP CGI/FastCGI SAPI 设置正确的php.ini


还通过注册表尝试过,但没有帮助:

【问题讨论】:

  • 我知道我必须在 Apache、 下的 Linux 上处理类似的情况,但我想知道是否可能会采用同样的方法在这里使用。基本上,我创建了两个单独的“CGI 文件”,每个文件基本上都归结为:exec /path/to/php-cgi --php-ini /path/to/php.ini $PATH_TRANSLATED。也就是说,命令文件显式调用 PHP 解释器并明确告诉它使用哪个php.ini 文件。在我看来,直觉上可以在这里制作类似的方法。 . . (而且,P.S.:“我也认为是 cgi-fcgi。”)
  • 考虑到我之前关于这是 FastCGI 的评论(无论主机环境如何......),我知道可以指定“单独的 pools 的 FastCGI worker-bees”,并将传入的请求定向到适当的请求。您应该能够以某种方式设置两个池:一个用于 PHP5,另一个用于 PHP7。 . .希望我能更具体一些,但我最近没有做过 Windows 托管的项目。
  • @MikeRobinson 感谢您也尝试在这个问题上提供帮助!但再一次:问题不在于使用了错误的 PHP 版本(或者在这种情况下是错误的php-cgi.exe)。问题是,某处已配置,D:\path\to\php7\php-cgi.exe 必须从D:\path\to\php5\php.ini(而不是D:\path\to\php7\php.ini)获取其配置。所以我必须找出为什么它的配置如此奇怪,以及如何改变它。
  • 我承认我的想法可能与这里无关,但请注意,在我的脚本中我确实指定了 PHP 可执行文件的确切身份和--php-ini。 Apache 只“启动一个指定的 CGI 进程”,并且它指定了这两个东西。 FastCGI 的驱动程序脚本可能类似。

标签: php iis iis-7 windows-server-2008 fastcgi


【解决方案1】:

Jan Reilinksolution 似乎也是正确的,但不幸的是,我找不到如何正确应用它(请参阅 Jan 的答案下方的 this 和其他我的 cmets)。

最后我通过 IIS GUI 解决了这个问题:

然后FastCGI Settings -> EnvironmentVariables -> PHPRC:

另请参阅 IIS 文档的“使用 FastCGI 在 IIS 7 上托管 PHP 应用程序”一章中的“Configure IIS to Handle PHP Requests”。

【讨论】:

    【解决方案2】:

    您需要在 FastCgi 配置中设置环境变量以在 IIS 中托管多个 PHP 版本。你想要的是 PHPRC:

    AppCmd set config -section:system.webServer/fastCgi
      /+"[fullPath='c:\php5\php-cgi.exe', arguments='-c
      c:\php5\php.ini'].environmentVariables.
      [name='PHPRC',value='c:\php5\php.ini']" /commit:apphost
    

    (请注意-c 参数)

    对 PHP 7 执行相同的操作,并更改路径。我在我的博文https://www.saotn.org/php-wincache-on-iis/ 中解释了这个,以及更多。

    【讨论】:

    • 感谢您的回答!是的,问题似乎就在这里。我有另一个 Windows Server,其中两个 PHP 版本运行良好,这些机器之间的区别是:C:\...\appcmd list config<application fullPath="D:\Data\Programme\php7\php-cgi.exe" ...><environmentVariables><environmentVariable name="PHPRC" value="D:\Data\Programme\php7\" />...<application fullPath="D:\Data\Programme\php7\php-cgi.exe" ...><environmentVariables><environmentVariable name="PHPRC" value="D:\Data\Programme\php\" />...
    • 但是当我尝试C:\...\appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name='PHPRC', value='D:\Data\Programme\php7\'] /commit:apphost 时出现错误:ERROR ( message:Cannot find SITE object with identifier "value='D:\Data\Programme\php7\']". )。为什么?
    • 当我删除name='PHPRC',value='D:\Data\Programme\php7\' (C:\...\appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name='PHPRC',value='D:\Data\Programme\php7\'] /commit:apphost) 之间的空格时,我收到另一个错误:ERROR ( message:Cannot find requested collection element. )
    • > C:\Windows\System32\inetsrv\appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name='PHPRC'].value='D:\Data\Programme\php7\' /commit:apphost 返回ERROR ( message:Unknown attribute "[fullPath='D:\Data\Programme\php7\php-cgi.exe'].environmentVariables.[name='PHPRC'].value='D:\Data\Programme\php7\'". Replace with -? for help. )
    • > C:\Windows\System32\inetsrv\appcmd set config /section:system.webServer/fastCgi /[fullPath='D:\Data\Programme\php7\php-cgi.exe',arguments='-c D:\Data\Programme\php7\php.ini'].environmentVariables.[name='PHPRC'].value='D:\Data\Programme\php7\' /commit:apphost 返回ERROR ( message:Cannot find SITE object with identifier "value='D:\Data\Programme\php7\']". )
    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多