• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

一个基础的基础问题,找不出问题,纠结

php 搞代码 3年前 (2022-01-23) 18次浏览 已收录 0个评论
文章目录[隐藏]

下面代码,下载下来的问题为什么大小只有0字节?

if( $attachment[‘attachment’] )
{
$file = ‘uploads/resource/’.$attachment[‘attachment’];

if( file_exists( dirname($file) ) )
{
$fileName = basename( $file );
header(“Content-type: application/force-download”);
header(“Content-type: application/octet-stream”);
header(“Accept-Ranges: bytes”);
header(“Accept-Length: “.filesize( $file ));
header(“Content-Disposition: attachment; filename=” . $fileName);

readfile( $file );
}
}

回复讨论(解决方案)

确认 $attachment[‘attachment’] 有值,且文件存在。

确认 $attachment[‘attachment’] 有值,且文件存在。

确定、肯定、以及一定,我在本地测试的。就吧知道为什么。。。

header(‘Content-length: ‘.filesize($file));

header(‘Content-length: ‘.filesize($file));

还是0字节。。。。。郁闷。。

程序没执行到第二个 if 。。。

if( file_exists( dirname($file) ) )
你判断的是目录是否存在,而不是文件是否存在,因此如果文件确实不存在,下载的内容就可能是空

if( file_exists( dirname($file) ) )
你判断的是目录是否存在,而不是文件是否存在,因此如果文件确实不存在,下载的内容就可能是空

如果改为:if( file_exists( $file) ),也不行。。。。

没有进入第二个if, 说明的你 uploads/resource/ 目录不存在,当然文件也不存在。

没有进入第二个if, 说明的你 uploads/resource/ 目录不存在,当然文件也不存在。

$file_dir = ‘/webfolder/hz/uploads/resource/’;
$file_name = $attachment[‘attachment’];
$file = $file_dir . $file_name;
这样提示文件没找到,但是我直接打到浏览器又可以,比如$file=’123.docx’;
127.0.0.1/webfolder/hz/uploads/resource/123.docx 这样下载下来是没问题的。

我的PHP文件和保存文件的文件夹都在hz文件夹里。。

$file_dir = ‘/webfolder/hz/uploads/resource/’;

这个是系统的根目录,不是网站的根目录,你两个概念搞混了

$file_dir = ‘/webfolder/hz/uploads/resource/’;

这个是系统的根目录,不是网站的根目录,你两个概念搞混了

$file_dir = ‘d:/cede/webfolder/hz/uploads/resource/’; 这样也不行呢

引用 10 楼 snmr_com 的回复:$file_dir = ‘/webfolder/hz/uploads/resource/’;

这个是系统的根目录,不是网站的根目录,你两个概念搞混了

$file_dir = ‘d:/cede/webfolder/hz/uploads/resource/’; 这样也不行呢

各种路径都试过了,就是吧不行,大侠们,求救!!!!!!!!!!!!!!!!

$file_dir = ‘/webfolder/hz/uploads/resource/’;
$file_name = $attachment[‘attachment’];
$file = $file_dir . $file_name;
这样提示文件没找到,但是我直接打到浏览器又可以,比如$file=’123.docx’;
127.0.0.1/webfolder/hz/uploads/resource/123.docx 这样下载下来是没问题的。

echo $file;//试试看

$file_dir = ‘/webfolder/hz/uploads/resource/’;
$file_name = $attachment[‘attachment’];
$file = $file_dir . $file_name;
这样提示文件没找到,但是我直接打到浏览器又可以,比如$file=’123.docx’;
127.0.0.1/webfolder/……

echo $file得到/webfolder/hz/uploads/resource/123.docx

127.0.0.1/webfolder/hz/uploads/resource/123.docx 这样下载下来是没问题的。
那么你的程序在哪里?(echo __FILE__; 看一下)

127.0.0.1/webfolder/hz/uploads/resource/123.docx 这样下载下来是没问题的。
那么你的程序在哪里?(echo __FILE__; 看一下)

echo __FILE__;得到D:\Code\webfolder\hz\public_attach_down.php,路径正确

程序
D:\Code\webfolder\hz\public_attach_down.php
也就是说文档为
D:/Code/webfolder/hz/uploads/resource/123.docx
其中 D:/Code 为网站的根
你先

$file = 'D:/Code/webfolder/hz/uploads/resource/123.docx';if( file_exists( $file ) ) {  $fileName = basename( $file );   header("Content-type: application/force-download");  header("Content-type: application/octet-stream");  header("Accept-Ranges: bytes");  header("Accept-Length: ".filesize( $file ));  header("Content-Disposition: attachment; filename=" . $fileName);  readfile( $file );}

测试一下

程序
D:\Code\webfolder\hz\pu9来源gaodai#ma#com搞@代~码$网搞gaodaima代码blic_attach_down.php
也就是说文档为
D:/Code/webfolder/hz/uploads/resource/123.docx
其中 D:/Code 为网站的根
你先PHP code?12345678910$file = ‘D:/Code/webfolder/hz/uploads/re……

不行,没执行if里面的程序,难道是在iframe里不行?

干嘛是框架?
你单独写个文件测试一下不就可以了吗

干嘛是框架?
你单独写个文件测试一下不就可以了吗

单独文件也不行。。。

那就是你提供的路径信息不对!
你最好截个图

那就是你提供的路径信息不对!
你最好截个图

这是站点路径

D:/Code/ htdocs_33594_v6/hz/uploads/resource/123.docx
你怎么总是说是 webfolder 呢?

D:/Code/htdocs_33594_v6/hz/uploads/resource/123.docx
你怎么总是说是 webfolder 呢?

红色部分只是个例子,代码中我是写htdocs_33594_v6这个的

引用 23 楼 xuzuning 的回复:D:/Code/htdocs_33594_v6/hz/uploads/resource/123.docx
你怎么总是说是 webfolder 呢?

红色部分只是个例子,代码中我是写htdocs_33594_v6这个的

$file = ‘D:/Code/htdocs_33594_v6/uploads/public/20130420071624_1761_上传_案.docx’;
if( file_exists( $file ) ) {
$fileName = basename( $file );
header(“Content-type: application/force-download”);
header(“Content-type: application/octet-stream”);
header(“Accept-Ranges: bytes”);
header(“Accept-Length: “.filesize( $file ));
header(“Content-Disposition: attachment; filename=” . $fileName);
readfile( $file );
}
这样在单独文件可以下载并正常,但是在iframe里就不行了,怪哉!!!!!

解决问题的过程是最有趣的。

解决问题的过程是最有趣的。

这个趣味也太折腾人了。。

撒打算打算的

撒打算打算的

 header("Content-Transfer-Encoding: binary"); 

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个基础的基础问题,找不出问题,纠结

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址