在pastebin URL上调用file()失败,但在本地文件或google.com上它可以正常工作

时间:2012-12-29 02:40:32

标签: php fopen remote-server pastebin

我正在处理一些PHP代码,这些代码依赖于碰巧托管在pastebin上的远程文件。我正在处理的服务器启用了所有必需的功能,因为设置为FILE_URL的{​​{1}}运行它会返回预期的结果。我还通过http://google.com验证了其他措施。

一切应该有效,但事实并非如此。在这样形成的URL php.ini上调用file()会返回500服务器错误。在本地或google.com上托管的完全相同的文件上执行相同操作会返回合理的结果。

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

http://pastebin.com/raw.php?i=<paste id here>

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

Pastebin似乎使用了一个保护系统,该系统将自动阻止发出“类似bot”的请求的IP地址。

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

要解决此问题,我建议您调查cURL,并查看setting a browser user agent作为授予您脚本访问权限的起点。我还应该提一下,调查这是否违反了Pastebin用户协议符合您的利益。虽然我看不到在their FAQ中使用脚本的任何参考(截至2012/12/29),但他们已经安装了针对脚本的保护。