Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 下载代码(readfile)给我一个空的或损坏的文件_Php_File - Fatal编程技术网

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

Php 下载代码(readfile)给我一个空的或损坏的文件,php,file,Php,File,我试图构建一个下载页面,通过从数据库获取文件信息来获取文件id和生成下载链接 有点用!出于某种原因,我从这个页面得到了一个文件,但它不是一个真正的文件! 例如,当我将图片id发送到此页面时,将下载一张图片,但它不会打开,并且它的大小实际上比实际大小小 这是我的密码 <?php require_once('class/comon.php'); require_once('class/db.php'); $file_id = isset($_GET['id']) &&am

我试图构建一个下载页面,通过从数据库获取文件信息来获取文件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 );


?>

然后我把输出放在url上,它会显示图片,这样就不会有问题了

看起来你想要的是
readfile('http://localhost/....)
或文件的绝对本地文件路径


要使用URL字符串,您需要提供读取文件的协议。

thanx我在localhost之前添加了“http://”,现在我得到一个大小为0的空文件!当我打印出路径并将输出放在url上时,它仍然显示picure@max,在发送内容长度头时,还需要更正
filesize()
调用中的路径。thanx实际上我发现我不应该只使用相对路径来设置文件大小,它现在可以工作,但由于某些原因它不显示图片,它在文本文件中添加了一些奇怪的字符,但是zip文件还可以!
echo 'localhost/Lancer/attach/'.$location.'/'.$filename;