Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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 Can';不能用CURL读取强制下载文件?_Php_Image_Curl - Fatal编程技术网

Php Can';不能用CURL读取强制下载文件?

Php Can';不能用CURL读取强制下载文件?,php,image,curl,Php,Image,Curl,我正在尝试读取一个文件的一部分。但文件托管服务器返回为头文件处的强制下载 我可以用fopen、fread读取文件的一部分 $f = fopen('http://www.hdwallpapers.org/download/beautiful-red-tree-scene-1280x800.jpg','r'); $response = fread($f, 3); echo $response.'<br>'; echo $response;exit(); 那么,如何使用CURL读取强制下

我正在尝试读取一个文件的一部分。但文件托管服务器返回为头文件处的强制下载

我可以用fopen、fread读取文件的一部分

$f = fopen('http://www.hdwallpapers.org/download/beautiful-red-tree-scene-1280x800.jpg','r');
$response = fread($f, 3); echo $response.'<br>';
echo $response;exit();

那么,如何使用CURL读取强制下载文件的一部分呢?

您可以使用以下代码进行尝试

function grab_image($url,$saveto){
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    $raw=curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);
}

你只是想读取文件?还是强制下载?无论如何。。下面是如何阅读它

 $link = 'http://www.hdwallpapers.org/download/beautiful-red-tree-scene-1280x800.jpg';
 $curl = curl_init($link);

 curl_setopt($curl, CURLOPT_TIMEOUT, 5);
 curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 //curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers );

 curl_setopt($curl, CURLOPT_RANGE, "0-2");

 $response = curl_exec($curl);
 $data = base64_encode ($response);

 echo "<img src='data:image/jpeg;base64,{$data}'>";
$link=http://www.hdwallpapers.org/download/beautiful-red-tree-scene-1280x800.jpg';
$curl=curl\u init($link);
curl_setopt($curl,CURLOPT_超时,5);
curl_setopt($curl,CURLOPT_BINARYTRANSFER,1);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
//curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);
curl_setopt($curl,CURLOPT_范围,“0-2”);
$response=curl\u exec($curl);
$data=base64_编码($response);
回声“;

两次?你在说什么?你看到这个问答链接了吗@M2sh不起作用。你试过我的密码了吗?我不想用fopen。只能和卷发一起使用吗?你的代码没有返回任何内容,因为我知道你需要在这里使用fopen。我更新了我的代码。试试看。我不想保存/下载文件。我只想读其中的一小部分。您可以在这里看到curlopt_范围。我可以用fopen+fread轻松地完成它,但我不能用curl和带有强制下载头的文件。我想读取文件的一小部分。你的代码是无效的。这是强制下载文件。在完整下载之前,你不能简单地阅读其中的一小部分。该代码最初并不下载图像。。它读到了,你试过了吗?另外,请尝试澄清一下“阅读小部分”的含义。如果你只想读取其中的一半,那么最好将图像数据放在gd函数中。它不返回任何内容是什么意思?也许你做错了什么。。。。这里有一个链接,显示了你没有看到的图像?你下载整个文件。我只需要读一小部分。我可以下载整个文件,如果我增加超时更高。我的位置离服务器很远,所以我需要10秒钟才能完成文件下载。这就是为什么timeout=5不返回任何内容,请运行我的fopen/fread代码以查看将返回什么内容,这就是我所需要的。在这种情况下,@M2sh声明的内容应该是您正在寻找的内容。
function grab_image($url,$saveto){
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    $raw=curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);
}
 $link = 'http://www.hdwallpapers.org/download/beautiful-red-tree-scene-1280x800.jpg';
 $curl = curl_init($link);

 curl_setopt($curl, CURLOPT_TIMEOUT, 5);
 curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 //curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers );

 curl_setopt($curl, CURLOPT_RANGE, "0-2");

 $response = curl_exec($curl);
 $data = base64_encode ($response);

 echo "<img src='data:image/jpeg;base64,{$data}'>";