0

我正在编写一些依赖于碰巧托管在pastebin 上的远程文件的PHP 代码。我正在使用的服务器启用了所有必要的功能,因为使用FILE_URLset 运行它会http://google.com返回预期的结果。我还通过php.ini额外的措施进行了验证。

一切都应该工作,但事实并非如此。调用file()这样形成的 URL http://pastebin.com/raw.php?i=<paste id here>,会返回 500 服务器错误。对本地或 google.com 上托管的完全相同的文件执行相同操作会返回合理的结果。

我已经验证了 URL 设置为正确的值,并验证了远程页面是我认为的位置。我不知所措。

ini_set("allow_url_fopen", true);
// Prefer remote (up-to-date) file, fallback to local file
if( ini_get("allow_url_fopen") ){
    $file = file( FILE_URL );
}
if(!isset( $file ) || !$file ) {
    $file = file( LOCAL_FILE_PATH );
}
4

2 回答 2

1

我无法对此进行测试,但您应该使用 curl,尝试以下操作:

<?php
$url = "http://pastebin.com/2ZdFcEKh";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
于 2012-12-29T02:58:13.577 回答
1

Pastebin 似乎使用了一种保护系统,该系统会自动阻止发出“类似机器人”的请求的 IP 地址。

在您的示例中,您将收到 500 服务器错误,因为该file()命令永远不会完成(因为他们的保护系统永远不会关闭连接)并且您的呼叫中没有超时设施。该脚本可能被认为是“类机器人”,因为file()它不会通过典型浏览器会通过的所有标准 HTTP 标头。

为了解决这个问题,我建议研究cURL并可能考虑将浏览器用户代理设置为授予对脚本的访问权限的起点。我还应该提到,调查这是否被视为违反 Pastebin 用户协议符合您的利益。虽然我在他们的常见问题解答(截至 2012 年 12 月 29 日)中看不到任何关于使用脚本的参考,但他们安装了针对脚本的保护是有原因的。

于 2012-12-29T03:04:28.543 回答