下载代码(readfile)给我一个空的或损坏的文件

时间:2011-10-22 16:12:49

标签: php file

我正在尝试构建一个下载页面,通过从数据库获取文件信息来获取文件ID和生成下载链接

它有点有效!由于某种原因,我从这个页面得到一个文件,但它不是一个真正的文件! 例如,当我向此页面发送图片ID时,将下载一张图片,但它不会打开,而且它的尺寸确实小于实际尺寸

这是我的代码

  <?php
require_once('class/comon.php');
require_once('class/db.php');

    $file_id = isset($_GET['id']) && (int)$_GET['id'] != 0 ? (int)$_GET['id'] : exit;
    $file = comon::get_fileinfo('files' , 'id' , $file_id );
    if(!$file) exit;

    foreach($file as $file){
    $location = $file['location'];
    $filename = $file['file_name'];
    }

    $ext = end(explode('.' , $filename ));

header( 'Pragma: public' ); 
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Cache-Control: private', false ); 
header( 'Content-Type: application/'.$ext);
header( 'Content-Disposition: attachment; filename="'. basename($filename) . '";' );
header( 'Content-Transfer-Encoding: binary' );
header( 'Content-Length: ' . filesize( 'http://localhost/Lancer/attach/'.$location.'/'.$filename ) );
readfile( 'http://localhost/Lancer/attach/'.$location.'/'.$filename );


?>

我在页面上打印了文件路径

echo 'localhost/Lancer/attach/'.$location.'/'.$filename;

然后我将输出放在网址上,它显示图片,以便不能解决问题

1 个答案:

答案 0 :(得分:3)

看起来您需要readfile('http://localhost/....')或文件的绝对本地文件路径。

要使用URL字符串,您需要为readfile提供协议。