我的服务器环境是nginx,采用fast-cgi方式来解析php。
$open_url = 'http://127.0.0.1:82/test.php';

$img_save_url = file_get_contents($open_url);
如果是test.html是可以正常得到值的,本机的aspx页面也可以获取结果。但php则报 504 gateway timeout错误
请问 这个问题是什么原因导致的?是不是cgi死锁了?
启动采用的方式是:RunHiddenConsole.exe c:\php\php-cgi.exe -b 127.0.0.1:9000 -c c:\php\php.ini

解决方案 »

  1.   

    nginx,php-cgi模式,为啥不用linux而要在windows下蛋疼呢……
      

  2.   

    $img_save_url = file_get_contents($open_url);
    需要 allow_url_fopen = On
    不知你设置了没有
      

  3.   

    默认就是开启的,test.html都可以正常获取值。
    我认为是php-cgi.exe的问题,当解析A页面时,同时又要解析B页面,在同一进程内锁住了。
      

  4.   

    默认 llow_url_fopen = Off你总不至于
    test.php$open_url = 'http://127.0.0.1:82/test.php';吧?
      

  5.   

    test.html能直接运行php语句么求扫盲
      

  6.   

    你看懂没有?
    我的意思是
    $open_url = 'http://127.0.0.1:82/test.html';
    $img_save_url = file_get_contents($open_url);
    $img_save_url是能获取返回值的,说明是能调到网站的,不是网络问题,而是php-cgi.exe内部那里出了问题。
      

  7.   


    单独在页面上调用test.php是能正确执行的,而且本地的aspx也是能调到返回值的,唯独就是php不能。
    我前面还发现了在请求出现timeout的瞬间,test.php的代码正确执行(保存了一张图片),而且每次都是这样。很头疼啊
      

  8.   

    谁说不能处理,不要后缀还可以处理,任何后缀我都可以用php处理。我给你扫盲下哈。
      

  9.   

    贴出你的nginx.ini配置文件 还有你的命令里面运行fastcgi命令
      

  10.   

    问题解决了,采用两个php-cgi.exe进程,一个端口是9000,一个端口是9001,就不会出现死锁问题了。两个子网站分别使用不同的处理:
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_pass   127.0.0.1:9001;
    问题原因应该是进程内死锁导致的。
      

  11.   


    不好意思理解错误你可以在命令下启动service nginx start或者查看nginx错误日志一般这种明显的错误都应该可以看得到
      

  12.   

    那你运行的需要在nginx.conf文件配置多个项目吗?
      

  13.   

    恩,是的,因为是两个网站(一个是子域名),在nginx中不同的网站配置使用不同的端口我认为更好些。