Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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:强制从不同域下载?_Php_Download - Fatal编程技术网

php:强制从不同域下载?

php:强制从不同域下载?,php,download,Php,Download,我想知道你们是否能为我的问题想出一些很棒的解决方案。正常的方法不起作用 好吧,我正试图用下面的php脚本强制下载任何网站上的任何文件。我只是将?p=传递到我的url和下载提示 <?php error_reporting(E_ALL); if(isset($_GET['p'])) $path = $_GET['p']; else echo "no path set!"; $file = $path; //header('Location:'

我想知道你们是否能为我的问题想出一些很棒的解决方案。正常的方法不起作用

好吧,我正试图用下面的php脚本强制下载任何网站上的任何文件。我只是将?p=传递到我的url和下载提示

    <?php
    error_reporting(E_ALL);

    if(isset($_GET['p'])) $path = $_GET['p'];
    else echo "no path set!";

    $file = $path;
    //header('Location:' . $file); //works perfect, opens the file in the browser
    //
    header("Cache-Control: no-cache");
    header("Expires: -1");
    header("Content-Type: application/octet-stream;");
    header("Content-Disposition: attachment; filename=\"" . basename($file) . "\";");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($file));
    echo readfile($file);
    ?> 
然而,正如我今天发现的那样,filesize只适用于我服务器上的本地文件,而不适用于http请求。这同样适用于readfile

警告:filesize[函数.filesize]:的stat失败 pathtofiles…/downloader/d.php联机 十五

警告: readfilesphotos.ak.fbcdn.net/hphotos-ak-snc4/hs211.snc4/… [function.readfile]:打开失败 流:HTTP请求失败!HTTP/1.0 403年禁止 pathtofiles…/downloader/d.php联机 十六,

我想知道是否有创造性的程序员可以在这里帮助我。我有没有机会让剧本发挥作用?我只想强制下载你传递的任何文件和url

提前谢谢你,
对于不在您控制下的远程文件,您不能“强制下载”。“强制下载”告诉浏览器下载即将传输的文件。位置:某些路径告诉浏览器查找新位置,从而侦听新位置,而不是当前页面

一个选项是在服务器上创建文件的本地副本,然后将其检索给用户,这不是最佳选择。如果文件足够大,这将给人一种冻结页面的印象。为了避免这种情况,您可以读取远程文件的块,并在每次读取命令后传递

请注意,您的代码没有限制$file可以下载的内容,因此允许用户在服务器上下载几乎任何可读的文件,这是一个安全缺陷。

如果您的PHP设置允许,filesize和readfile可以使用某些协议

然而,眼前的问题更为根本:

HTTP请求失败!HTTP/1.0 403在路径文件中被禁止


请记住,使用PHP获取文件时,它没有用户的登录权限。脚本instaince就像一个独立的浏览器。如果资源受密码保护,则需要先让PHP脚本登录。

如果可以控制远程文件,最好的方法是将文件大小存储在数据库中,然后使用readfile函数

来自PHP手册

readfile如果已启用fopen包装器,则可以使用URL作为此功能的文件名


它失败是因为403错误,而不是因为http请求,不是吗?