PHP cURL本地域名解析

时间:2014-07-17 13:43:01

标签: php windows curl nginx dns

首先,我使用Windows(XP - 是的,我知道),php-fpm(5.4.9)和nginx(1.5.10)。我的本地开发环境运行良好。

我使用本地域名的.dev扩展名指向本地网站项目。例如:example.devwww.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,这些代码示例似乎确实有效。

1 个答案:

答案 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