我用的是file_exists函数判断文件是否存在,可奇怪的是如果我只判断文件的目录是否存在返回true,只要一加上文件名就返回false(文件是确实存在的)求教这是为什么?
<code>public function download($file_url){ if(!isset($file_url)||trim($file_url)==''){ echo '路径不正确';exit; } $filename=$this->get_basename($file_url); $file_name = preg_replace("/(\s|\ \;| |\xc2\xa0)/","",$filename); //去掉文件名中的空格。 $file_name = iconv("UTF-8","GB2312",urldecode($file_name)) ; //取文件名称,将urlcode编码转回来 $filename = str_replace( '+', '%20', urlencode($filename) ) ; //解决urlcode编码空格问题。 //这一步 我把生成的$file 打印出来放在url里回车 直接下载 可是就是在判断文件是否存在哪里一直不通过 $file = dirname(base_url($file_url)).'/'.$filename ; $file = fopen($file,"r"); if (!$file) { echo "文件找不到"; } else { header("Content-type: application/octet-stream"); //header("Accept-Ranges: bytes"); //header("Accept-Length: ".filesize($file_url)); Header("Content-Disposition: attachment; filename=" . trim($file_name)); while (!feof ($file)) { echo fread($file,50000); } fclose ($file); } }</code>
我用的是file_exists函数判断文件是否存在,可奇怪的是如果我只判断文件的目录是否存在返回true,只要一加上文件名就返回false(文件是确实存在的)求教这是为什么?
<code>public function download($file_url){ if(!isset($file_url)||trim($file_url)==''){ echo '路径不正确';exit; } $filename=$this->get_basename($file_url); $file_name = preg_replace("/(\s|\ \;| |\xc2\xa0)/","",$filename); //去掉文件名中的空格。 $file_name = iconv("UTF-8","GB2312",urldecode($file_name)) ; //取文件名称,将urlcode编码转回来 $filename = str_replace( '+', '%20', urlencode($filename) ) ; //解决urlcode编码空格问题。 //这一步 我把生成的$file 打印出来放在url里回车 直接下载 可是就是在判断文件是否存在哪里一直不通过 $file = dirname(base_url($file_url)).'/'.$filename ; $file = fopen($file,"r"); if (!$file) { echo "文件找不到"; } else { header("Content-type: application/octet-stream"); //header("Accept-Ranges: bytes"); //header("Accept-Length: ".filesize($file_url)); Header("Content-Disposition: attachment; filename=" . trim($file_name)); while (!feof ($file)) { echo fread($file,50000); } fclose ($file); } }</code>
可能是你的文件夹或者文件的权限问题
应该是你用dirname()的时候返回的路径问题,可以移除结果里面最左边的'/'
fopen要求文件名就是实际的文件名,而你的$filename变量是urlencode的值,所以打不开,却可以下载