PHP本地托管,通过代理服务器连接到外部资源


PHP locally hosted, connecting to external resources through a proxy server

我正在尝试进行一些本地托管的facebook开发,但我在大学网络上,因此我计算机的所有传出连接都需要通过我们的代理服务器。我遇到的主要问题是,我似乎找不到任何文档来设置apache使用代理服务器,而不是充当代理服务器。

然而,考虑到这一点,也许当我执行"cURL"请求或fopen时,apache不执行数据检索,而是由PHP驱动程序执行。旧版本允许您在PHP.ini文件中设置全局代理,但不能在PHP5中设置。

我必须使用代码来实际设置默认值,并且找不到任何可以永久设置它们的配置文件。例如,这设置了流,以便fopen可以运行:

    $r_default_context = stream_context_get_default
    (
    array
        (
        'http' => array
            ( // All HTTP requests are passed through the local NTLM proxy server on port 8080.
            'proxy' => 'tcp://proxy.munged.edu:8080',
            'request_fulluri' => True,
            ),
        )
    );

但这不会设置使用cURL所需的所有内容,我必须这样做:

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXY, "http://proxy.munged.edu:8080");
    curl_setopt($ch, CURLOPT_PROXYPORT, 8080);

有没有人知道如何设置所有需要传出连接的东西来使用这个代理,因为我不会对这台计算机特定的代码进行编码(因为我的计划是在本地处理我的代码,然后在完成后将其上传到一些网络空间:更改/上传/刷新周期比更改/刷新周期更耗时)

编辑:

为了澄清,我已经将所有这些包含在一个名为"proxyconfig.php"的文件中,然后检查它是否存在,并在顶部包含()。如果没有办法在配置文件中设置默认值,那么拥有为API设置facebook.php页面所需的所有内容的方法将是令人敬畏的。

您的方法是正确的,假设应用程序处于iframe模式(FBML应用程序要求Facebook能够回调到您的服务器)。

如果问题是希望能够在本地开发并部署到远程站点,而对文件的修改最小,我建议将BaseFacebook扩展为一个名为LocalBaseFacebook的新类,并将CURL_OPTS更改为:

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 10,
    CURLOPT_USERAGENT      => 'facebook-php-3.0',
    CURLOPT_PROXY          => 'http://proxy.munged.edu:8080',
    CURLOPT_PROXYPORT      => 8080
);

在部署时,在基于主机名或某些唯一标识的属性/配置实例化Facebook类时进行切换(您甚至可以使用$_GET变量,如?is_local=1),并将其附加到Canvas URL的末尾。