首先,我使用Windows(XP - 是的,我知道),php-fpm(5.4.9)和nginx(1.5.10)。我的本地开发环境运行良好。
我使用本地域名的.dev
扩展名指向本地网站项目。例如:example.dev
或www.example.dev
。
我已设置我的主机文件(C:\Windows\System32\drivers\etc\hosts
)以包含这些附加记录:
127.0.0.1 example.dev www.example.dev
当我对域名www.example.dev
进行ping操作时,它会按照您的预期解析为127.0.0.1
。
我可以在浏览器中访问该网页:http://www.example.dev
,它会显示一些您希望看到的“Hello World”文字。
现在,如果我在浏览器中运行以下脚本,它将不起作用:
<?php var_dump( file_get_contents( 'http://www.example.dev' ) ); ?>
对我来说nginx只是超时,即使我可以在我的浏览器中导航到它而没有问题。
现在对于cURL,以下操作也不起作用:
<?php
$url = 'http://www.example.dev';
$ch = curl_init();
$options = array(
'CURLOPT_URL' => $url,
'CURLOPT_HEADER' => TRUE,
'CURLOPT_FAILONERROR' => FALSE,
'CURLOPT_FOLLOWLOCATION' => TRUE,
'CURLOPT_AUTOREFERER' => TRUE,
'CURLOPT_RETURNTRANSFER' => TRUE,
'CURLOPT_FRESH_CONNECT' => TRUE,
);
foreach ( $options as $k => $v )
{
curl_setopt( $ch, constant( $k ), $v );
};
$response = curl_exec( $ch );
$header_size = curl_getinfo( $ch, CURLINFO_HEADER_SIZE );
$status_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
$info = curl_getinfo( $ch );
curl_close( $ch );
var_dump( $response ); exit;
?>
但是,如果我用localhost替换example.dev,这些代码示例似乎确实有效。
答案 0 :(得分:0)
这似乎与PHP-FPM实际上不能在Windows上运行这一事实有关。见https://stackoverflow.com/a/10640722/156406
最简单的方法是使用.bat
文件生成自己的PHP实例池,并使用nginx将请求发送到池中。
创建以下php-pool.bat
更新特定安装的所有引用。
@ECHO Off
SETLOCAL EnableDelayedExpansion
SET phpdir=C:\Server\php\5.4.9
SET phpnum=3
REM Kill currently running PHP Processes.
TASKKILL /f /IM php-cgi.exe
FOR /L %%G IN (0, 1, %phpnum%) DO (
REM ECHO Starting PHP Instance: %phpsrv%:900%%G
START /b %phpdir%\php-cgi.exe -b 127.0.0.1:900%%G: -c %phpdir%\php.ini
)
然后更新你的nginx配置文件:
upstream backend {
server 127.0.0.1:9000 weight=1;
server 127.0.0.1:9001 weight=1;
server 127.0.0.1:9002 weight=1;
}
server {
...
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi_params;
}
...
}
这不是一个完美的解决方案,但让我的示例有用。在这里查看更多: https://bitbucket.org/cybergene/spawn-php/wiki/Home