php文件下载,不能找到用file_exists()判断文件存放的绝对路径是,提示文件不存在。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php文件下载,不能找到用file_exists()判断文件存放的绝对路径是,提示文件不存在。。相关的知识,希望对你有一定的参考价值。

<?php

//文件下载
//$file_name 要下载的文件名
//$file_sub_path 要下载的文件的子目录 /xxx/xxx/
function file_down($file_name,$file_sub_path)

//获取文件的绝对路径
echo $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_path.$file_name;

if(!file_exists($file_path))

echo "文件不存在!";
return;


//文件存在,打开文件

$fp=fopen($file_path,"r");

//获取取文件大小
$file_size=filesize($file_path);

header("Content-type:application/octet-stream"); //返回的是文件的形式

header("Accept-Ranges:bytes"); //按照字节大小返回

header("Accept-Length:$file_size"); //返回文件大小

//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition:attachment; filename:".$file_name);

//向客户端会送数据,每次以多大字节传输文件
$buffer=1024;
//为了下载安全,常做一个计数器计数
$file_count=0;
//判断文件是否结束
while(!feof($fp) && ($file_size-$file_count)>0)

$file_data=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;


fclose($fp);



file_down("ab.jpg","/http/image/");

?>

我的这个文件放在 /apache/htdocs/http/ 目录下

图片放在/apache/htdocs/http/image/ 目录下

求教大神指导

路径不对。。。。。追问

我做了映射D盘了,将它放回C盘就没报错。但是提示的是一个php的文件下载,下载下来还是乱码。 求指教。。。

参考技术A $_SERVER['DOCUMENT_ROOT']返回的是当前脚本的路径

非常奇怪的 PHP file_exists 问题

【中文标题】非常奇怪的 PHP file_exists 问题【英文标题】:Very weird PHP file_exists issue 【发布时间】:2013-02-07 09:28:25 【问题描述】:

我在使用 file_exists 函数时遇到了一个非常奇怪的情况。托管公司表示他们的 php 配置为 CGI 模式而不是 PHP 模式。下面是代码。在加载包含代码的页面时,它会在 50 秒左右的时间内动态检查数据文件夹中名为 test.txt 的文件是否存在。如果找到文件,则显示“文件存在”并退出 while 循环。如果在 50 秒内没有找到文件,则显示“文件不存在”并在页面加载完成后中断循环。

奇怪的事情1:它没有按预期工作,只有在文件存在时第一次加载页面时才能找到文件。即使在我刷新页面时删除了 test.txt 后,它也会继续显示“文件存在”。如果 test.txt 根本不在数据文件夹中,即使我将文件夹中的 test.txt 移回后,它也会显示“文件不存在”。

奇怪的事情 2:如果我放一个大于 170K 的更大文件,它看起来运行良好,但小文件却不行,尤其是在 40 字节以下。我尝试了许多不同的方法来检查文件是否存在,包括绝对路径,仍然没有运气。

感谢您提供任何线索!

正在加载页面...

$counter= 1;

while ($counter++) 

    sleep(5);

    if (file_exists("data/test.txt")) 
    echo "File exists";
    break;
    

    if ($counter>10)
    echo "File does not exist";
    break;
    


【问题讨论】:

【参考方案1】:

PHP 缓存结果。在使用 file_exists() 之前使用clearstatcache();。

【讨论】:

还是不行,会不会是CGI模式的问题?任何其他方式进行检查?谢谢!【参考方案2】:

由于您在循环中多次检查此文件是否存在,因此您可能需要在此处考虑缓存问题。

取自the documentation 的file_Exists() -

注意:这个函数的结果是缓存的。详情请见clearstatcache()。

也许你应该尝试将你的脚本修改成这样 -

while ($counter++) 
  sleep(5);
  clearstatcache(); 
  if (file_exists("data/test.txt")) 
    echo "File exists";
    break;
  
  ...

【讨论】:

在加入 clearstatcache() 后会好一些,但还是不行。我首先加载页面,当页面加载时,我将test.txt放在数据文件夹中,50秒后没有找到文件。如果刷新几次,它找到了文件。该代码与其他托管服务运行良好,可能是 CGI 模式问题吗? @use - 我不太熟悉这些差异,所以我不能肯定地说...但是如果唯一改变的是托管,唯一的区别是 CGI 模式,这可能是问题所在......

以上是关于php文件下载,不能找到用file_exists()判断文件存放的绝对路径是,提示文件不存在。。的主要内容,如果未能解决你的问题,请参考以下文章

非常奇怪的 PHP file_exists 问题

file_exists() 的 PHP 不区分大小写版本

PHP file_exists 对现有文件返回 false

即使我的 linux 上存在文件,php file_exists 也会返回 false

PHP file_exists() 在某些文件上返回 false

unlink/file_exists 和文件未找到