如何使用cURL / PHP下载客户端视频?

时间:2019-01-06 13:28:20

标签: php curl

如果运行以下PHP,我想在客户端站点上使用`cURL下载文件。这意味着,如果我的网站访问者运行的一个操作将启动此PHP文件,则应在该PC上下载该文件。

我在不同的位置尝试过,但没有成功。如果我运行代码,它将始终将其下载到我想要的WebSever上。

<?php
//The resource that we want to download.
$fileUrl = 'https://www.example.com/this-is-a-example-video';

//The path & filename to save to.
$saveTo = 'test.mp4';

//Open file handler.
$fp = fopen($saveTo, 'w+');

//If $fp is FALSE, something went wrong.
if($fp === false){
    throw new Exception('Could not open: ' . $saveTo);
}

//Create a cURL handle.
$ch = curl_init($fileUrl);

//Pass our file handle to cURL.
curl_setopt($ch, CURLOPT_FILE, $fp);

//Timeout if the file doesn't download after 20 seconds.
curl_setopt($ch, CURLOPT_TIMEOUT, 20);

//Execute the request.
curl_exec($ch);

//If there was an error, throw an Exception
if(curl_errno($ch)){
    throw new Exception(curl_error($ch));
}

//Get the HTTP status code.
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

//Close the cURL handler.
curl_close($ch);

if($statusCode == 200){
    echo 'Downloaded!';
} else{
    echo "Status Code: " . $statusCode;
}
?>

如何将cURL downloading process更改为client-site

1 个答案:

答案 0 :(得分:0)

PHP无法运行客户端。

可以使用cURL将数据下载到服务器(不保存到文件中),然后将数据输出到客户端。

不要这样做:

//Open file handler.
$fp = fopen($saveTo, 'w+');

或者这个:

//Pass our file handle to cURL.
curl_setopt($ch, CURLOPT_FILE, $fp);

然后捕获输出:

//Execute the request.
curl_exec($ch);

应该是:

//Execute the request.
$output = curl_exec($ch);

然后您可以:

echo $output;

…,但请确保设置Content-Type并考虑设置Content-Length响应标头。您可能还需要Content-Disposition


在大多数情况下,最好直接发送浏览器直接获取文件,而不是通过服务器代理。

$fileUrl = 'https://www.example.com/this-is-a-example-video';
header("Location: $fileUrl");