我在Windows Server 2012 R2上使用IIS 8.5来托pipeASP.NET和PHP应用程序。 由于有几个不同的PHP应用程序,我想通过使用open_basedir来限制访问。 问题:使用IIS PHP-Manager无法为每个vHost使用不同的php.ini文件。 所以我find了一个自定义的解决scheme:PHPpipe理器添加了php-handler的赋值后,我修改了可执行文件如下:
"C:\Program Files (x86)\PHP\v5.4.26\php-cgi.exe"|-c D:\Sites\my-domain.com
这是工作,vHost使用php.ini文件D:\ Sites \ my-domain.com \ php.ini。 但是这个解决scheme对我来说看起来有点脏。 有没有更好的方式为每个vHost设置一个php.ini文件?
@ahmelsayed他的回答+1。 但是您可以在IIS中创build多个FastCGI应用程序,使用Appcmd轻松创build不同的php.ini文件。 但是每个应用程序池只有一个handler / php.ini,请参阅:
设置两个FastCGI应用程序:
Appcmd.exe set config /section:system.webServer/fastCGI /+"[fullPath='c:\php5\php-cgi.exe', arguments='-cc:\php5\php.site1.ini'], maxInstances='0', idleTimeout='300', activityTimeout='70', requestTimeout='90', instanceMaxRequests='9999', protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost Appcmd.exe set config /section:system.webServer/fastCGI /+"[fullPath='c:\php5\php-cgi.exe', arguments='-cc:\php5\php.site2.ini', maxInstances='0', idleTimeout='300', activityTimeout='70', requestTimeout='90', instanceMaxRequests='9999', protocol='NamedPipe', flushNamedPipe='False']" /commit:apphost
然后,每个网站都可以拥有自己的.php处理程序,指向一个php.ini文件:
AppCmd.exe set config "site1.com" /section:system.webServer/handlers "-+[name=`'PHP`', path=`'*.php`', verb=`'*`', modules=`'FastCgiModule`', scriptProcessor=`'c:\php5\php-cgi.exe|-cc:\php5\php.site1.ini`', resourceType=`'File`', allowPathInfo=`'true`', requireAccess=`'Script`']" AppCmd.exe set config "site2.com" /section:system.webServer/handlers "-+[name=`'PHP`', path=`'*.php`', verb=`'*`', modules=`'FastCgiModule`', scriptProcessor=`'c:\php5\php-cgi.exe|-cc:\php5\php.site2.ini`', resourceType=`'File`', allowPathInfo=`'true`', requireAccess=`'Script`']"
如果你不喜欢命令行,你可以点击你的方式通过IISpipe理器当然:)顺便说一句,假设正确configuration的应用程序池身份和NTFS文件的权限,我相信没有必要open_basedir。
编辑:两个参考: https : //www.saotn.org/php-wincache-on-iis/和https://www.saotn.org/custom-php-version-iis-express-webmatrix3/展示如何在IIS中添加多个FastCGI + PHP应用程序。