Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在pastebin URL上调用file()失败,但在本地文件或google.com上可以工作_Php_Fopen_Remote Server_Pastebin - Fatal编程技术网

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

Php 在pastebin URL上调用file()失败,但在本地文件或google.com上可以工作,php,fopen,remote-server,pastebin,Php,Fopen,Remote Server,Pastebin,我正在编写一段PHP代码,它依赖于一个远程文件,而这个文件恰好托管在pastebin上。我正在使用的服务器已经启用了所有必要的功能,因为运行它时FILE\u URL设置为http://google.com返回预期结果。我还通过php.ini验证了额外的措施 一切都应该起作用,但事实并非如此。在这样形成的URL上调用file(),http://pastebin.com/raw.php?i=,返回500服务器错误。在本地或google.com上托管的完全相同的文件上执行同样的操作会返回一个合理的结果

我正在编写一段PHP代码,它依赖于一个远程文件,而这个文件恰好托管在pastebin上。我正在使用的服务器已经启用了所有必要的功能,因为运行它时
FILE\u URL
设置为
http://google.com
返回预期结果。我还通过
php.ini
验证了额外的措施

一切都应该起作用,但事实并非如此。在这样形成的URL上调用
file()
http://pastebin.com/raw.php?i=
,返回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 );
}

我无法测试这一点,但您应该使用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);

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

在您的示例中,由于
file()
命令从未完成(因为他们的保护系统从未关闭连接),并且您的调用中没有超时功能,因此将出现500服务器错误。由于
file()
没有通过典型浏览器可能使用的所有标准HTTP头,因此该脚本可能被认为是“类似于机器人的”


为了解决这个问题,我建议进行调查,也许可以将其作为授予脚本访问权限的起点。我还应该提到,调查这是否被视为违反Pastebin用户协议符合您的利益。虽然我看不到在中使用脚本的任何参考(截至2012/12/29),他们安装脚本保护是有原因的。

很可能他们阻止了你,因为你没有设置标题数据,或者他们的标题是重定向,而你的标题没有被重定向。添加
CURLOPT_RETURNTRANSFER
pastebin.com的原始代码url
我感谢你的帮助!通过@shiplu.mokadd.im的贡献,这个解决方案非常有效。感谢您提供的信息!做了一点阅读,他们有一个发布的API,虽然它只包括发布/编辑粘贴。我假设粘贴的读取是由程序员来决定的。非常欢迎。我认为他们的保护服务涵盖了禁止方面,我认为这被称为ProxyShield。这是一个位于服务器前面的层,用于保护服务器免受各种DoS情况的影响。我试图查找有关ProxyShield服务的信息,但没有发现任何实质性内容。