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

时间:2011-06-06 21:58:51

标签: php facebook apache configuration proxy

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

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

我必须使用代码来实际设置默认值,并且找不到任何可以永久设置它们的配置文件。例如,这会设置流,因此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”的文件中,然后检查它是否存在,并将()包含在顶部。如果没有办法在配置文件中设置默认值,那么设置facebook.php页面用于其API所需的所有内容的方法都会很棒。

1 个答案:

答案 0 :(得分:1)

您的方法是正确的,假设应用程序处于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。