PHP-从URL强制下载文件

时间:2016-08-11 09:45:53

标签: php mysql limit records

我有问题。我创建了一个带有上传文件的网页,我有正确的URL到文件的数据库(MySQL)(文件路径)(在数据库中只有文件的URL,文件在服务器上的文件夹中)。现在我尝试写/搜索php脚本下载此文件上传的内容。所有网络都运行良好,但这个下载脚本不起作用。我读过,我认为对我来说最好的方式是用#header;#39;下载,但我没有尝试。文件下载到我们的磁盘,名称正确,文件扩展名正常,文件在正确的程序中打开,但如果文件有名称字符(&#39 ;;',':'等。)文件下载没有这些字符,并且不正确(缺少扩展名,坏名称)。第二个问题:所有下载的文件都是空的(0 b大小),一切正常,但它们是空的,一些提示?在此先感谢您的帮助

我的下载代码不好:

<?php
    $data=date('Y-m-d_H:i:s');
    $nazwa=$_POST['downtitle'];
    $urlek=$_POST['downurl'];
    $extrozsz=$_POST['downext'];
    $filePath = $urlek;
    $fileName = $nazwa.$data.".".$extrozsz;

    //------------------------------------------------------------------------

//  $fd = fopen($filePath,"r");
//  $size = filesize($filePath);
//  $contents = fread($fd, filesize($filePath));

//  fclose($fd);

//  header("Content-Type: application/octet-stream");
//  header("Content-Length: $size;");
//  header("Content-Disposition: attachment; filename=$fileName");

//  echo $contents;

    //----------------------------------------------------------------------


//      set_time_limit(0);    
//      while( $urlek = $response->fetch() )
//      {
//      $my_pliki = file_get_contents("$urlek");
//      $my_file = fopen("$urlek","w+");
//      fwrite($my_file,$my_pliki);
//      fclose($my_file);
//      }

//----------------------------------------------------------------------------

$quoted = $filePath;
$size   = filesize($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);

&GT;

3 个答案:

答案 0 :(得分:0)

filename参数有一些限制,在RFC6266

中有详细描述

因此,当您想要使用ISO-8859-1字符集中不存在的字符时,您需要使用filename*标头,或者需要从文件名中删除/替换这些字符。可以找到这样做的好方法here

答案 1 :(得分:0)

谢谢,我编辑了我的php:

<?php
    $data=date('Y-m-d_H:i:s');
    $nazwa=$_POST['downtitle'];
    $urlek=$_POST['downurl'];
    $extrozsz=$_POST['downext'];
    $filePath = $urlek;
    $fileName = $nazwa.$data.".".$extrozsz;

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Type: application/force-download");
        header("Content-Disposition: attachment; filename=\"" . $fileName."\"");
        header("Content-Description: File Transfer");
        readfile($filePath);

?>

现在一切正常,但我现在有一个问题:在MySQL数据库中我有标题,描述,添加日期,首映日期,我希望有搜索字段。我在input type =“search”中完成了,但是现在用什么脚本在数据库中的这个指定表中进行搜索,首先打开我知道的数据库,但是后来什么命令用于数据库中的搜索?我知道'喜欢'但更好一些?并且毕竟返回正确的结果并显示所有来自数据库的这个搜索词是好的一些提示?对不起英语不好,谢谢。

答案 2 :(得分:0)

好的,现在一切都好,但另一个问题。我有在网站上显示新闻的代码。所有新闻都在同一时间显示(网站太长)。我希望在网站号码的底部(在所有网站下都是这个用于转发第二个子页面上的旧消息)。但是怎么做? Sup或sub用于小词,数字等,但所有都是从数据库中检索的:

$zapytanie='SELECT * FROM filetable WHERE Section="Other" ORDER BY ID DESC LIMIT 10';

这是在我的PHP代码查询中显示最新的10条新闻,但是如果我在底部添加正常的小数字如何构造代码以显示接下来的10条新闻(不在id =“10-11”,因为如果我将有1千新闻或更多它太原始了)我必须有自动代码显示下一页10或20新闻的页面如何?