【问题标题】:PHP cURL Local Domain Name ResolutionPHP cURL 本地域名解析
【发布时间】:2014-09-08 10:16:12
【问题描述】:

首先,我使用的是 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

当我 ping 他们时,域名www.example.dev 解析为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;
?>

但是,如果我将 example.dev 替换为 localhost,这些代码示例似乎确实有效。

【问题讨论】:

    标签: php windows curl nginx dns


    【解决方案1】:

    这似乎与 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2013-12-12
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多