【问题标题】:loading remote data on server in PHP用 PHP 在服务器上加载远程数据
【发布时间】:2010-01-14 20:57:54
【问题描述】:

我正在尝试从我的 php 代码中的远程 URL 加载内容。有两个限制:

  1. 我需要使用我拥有的专用服务器 IP,因此其他服务器的 REMOTE_ADDR 必须是我的专用 IP。这消除了 Curl,因为 Curl 使用代理来加载远程 URL,并且代理更改了不起作用的 IP 地址。

  2. 我需要使用 PHP 在我的后端加载数据。出于安全原因,我不想使用 Javascript。

除了Curl还有其他解决方案吗?

谢谢

【问题讨论】:

  • cURL 使用代理?这是您的配置所独有的吗?
  • 嗨,弗兰克,托管服务提供商在他们的云服务器上使用了代理。因此,当我调用 cURL 时,它会离开我的服务器并通过代理然后到达我想要的 URL。

标签: php curl


【解决方案1】:

file_get_contents($url) 呢?请注意,某些网站需要用户代理,因此您必须在拨打电话之前使用ini_set() 设置一个。

【讨论】:

    【解决方案2】:

    当使用stream api 和使用socket-wrapper 的包装器时,您可以设置bindto context parameter 来完成(1):

    用于指定 PHP 将用于访问网络的 IP 地址(IPv4 或 IPv6)和/或端口号。语法是 ip:port。将 IP 或端口设置为 0 将让系统选择 IP 和/或端口。
    $ctx = stream_context_create( array(
      'socket' => array(
        'bindto' => '192.168.0.107:0',
       )
    ));
    
    $c= file_get_contents('http://php.net', 0, $ctx);
    

    【讨论】:

    • 使用'bindto'属性是解决这个问题的关键。谢谢
    【解决方案3】:

    您可能会为此使用fopen

    【讨论】:

    • +1 是的,如果 fopen_url_wrappers 未启用,则始终存在较低级别的套接字函数。
    【解决方案4】:

    你试过file_get_contents

    <?php
    $homepage = file_get_contents('http://www.stackoverflow.com/');
    echo $homepage;
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2018-06-07
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多