Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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_Hyperlink - Fatal编程技术网

如何在PHP中创建下载链接?

如何在PHP中创建下载链接?,php,download,hyperlink,Php,Download,Hyperlink,我可以使用sql在数据库中上载文件,但如何为其创建下载链接?就像当你在线下载东西时,会出现一个消息框,询问你是想用程序打开它还是保存它。如何在php中实现这一点?你能给我密码吗?我还是个笨蛋 将此代码与PHP代码一起放在一个页面上,从DB获取信息,并将其放在名称/大小/数据的变量中,然后链接到该页面 <?php header('Content-Description: File Transfer'); header('Content-Type: application/octet-stre

我可以使用sql在数据库中上载文件,但如何为其创建下载链接?就像当你在线下载东西时,会出现一个消息框,询问你是想用程序打开它还是保存它。如何在php中实现这一点?你能给我密码吗?我还是个笨蛋

将此代码与PHP代码一起放在一个页面上,从DB获取信息,并将其放在名称/大小/数据的变量中,然后链接到该页面

<?php
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $name_of_file);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size_of_file);

echo $file_data;
?>


并非上面列出的所有标题都是严格必需的-事实上,只有内容类型标题才是使下载正常工作所真正必需的。内容处置标题可以包括在内,以便您可以指定正确的文件名;其他标题只是帮助浏览器更好地处理下载,如果您愿意,可以省略。

对这段代码进行一些编辑,使其在我的情况下工作。-用于MP3

您可以通过调用该文件
filedownload.php
,将其放入您的服务器

在本例中,从一个文件调用它,如从WordPress自定义字段调用

<a href="<?php bloginfo('url'); ?>/filedownload.php?download=<?php echo get_post_meta($post->ID, 'mymp3_value', true) ?>">MP3</a>

做起来很简单

<?php
    $name_of_file = $_GET["download"];

    header('Content-Description: File Transfer');
    // We'll be outputting a MP3
    header('Content-type: application/mp3');
    // It will be called file.mp3
    header('Content-Disposition: attachment; filename=' .$name_of_file);
    header('Content-Length: '.filesize($name_of_file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    // The MP3 source is in somefile.pdf
    //readfile("somefile.mp3");

    readfile_chunked($name_of_file);

    function readfile_chunked($filename) { 
        $chunksize = 1*(1024*1024); // how many bytes per chunk 
        $buffer = ''; 
        $handle = fopen($filename, 'rb');

        if ($handle === false) { 
            return false; 
        } 

        while (!feof($handle)) { 
            $buffer = fread($handle, $chunksize); 
            print $buffer; 
        } 

        return fclose($handle); 
    } 
?>

“使用sql在数据库中上载文件”您是将文件作为blob存储在数据库中?还是存储在文件系统中?这很重要。我如何使用它直接从数据库下载文件?用户将文件上载到数据库中,当管理员需要检查该文件时,他当然需要下载该文件。我该如何做?如果您对PHP和D掌握不够B概念要使用上面的代码来完成您想要做的事情,您可能需要使用一个预制作的数据库管理解决方案,如PHPMyAdmin()取而代之。谢谢。我会去那里。还有一件事,当我在数据库中以blob形式存储文件时,我是否必须将文件名和文件大小单独存储在一列中,或者不必存储?我知道这可能看起来像个愚蠢的问题,但我真的是个傻瓜。无论如何,谢谢。@phpnoob也许这会有帮助:变量$file\u data和$name\u of\u of\u file从数据库中提取它们的值。为了简洁起见,Dav省略了执行此操作的部分代码。@phpnoob-您需要单独存储文件名,因为它与文件的数据(实际BLOB中存储的内容)无关。您可能只需查看查询结果中BLOB数据的大小即可计算文件大小。