【问题标题】:PHP: Problem with filesizePHP:文件大小问题
【发布时间】:2010-04-09 17:07:08
【问题描述】:

我需要一点帮助:

我从 HTML 上传表单中获取了一个文件。我在 $File 中有一个“目标”文件名。

当我这样做时:

copy($_FILES['binfile']['tmp_name'], $File);
echo '<hr>' . filesize($_FILES['binfile']['tmp_name']);
echo '<hr>' . filesize($File);

一切正常。我两次得到相同的号码。

但是,当我删除 filesize() 的第一次调用时,我得到“0”(零)。

copy($_FILES['binfile']['tmp_name'], $File);
echo '<hr>' . filesize($File);

有什么建议吗?我究竟做错了什么?为什么我需要先获取“原始”文件的文件大小,然后才能获取副本的大小?

(实际上就是这样:我需要为原始文件调用 filesize()。既不 sleep() 也不调用 filesize() 另一个文件有帮助。)

系统:

  • Apache 2.0
  • PHP 5.2.6
  • Debian Linux (Lenny)

【问题讨论】:

  • 不要使用copy;请改用move_uploaded_file
  • @Gumbo:酷。不知道有这个功能。似乎也解决了我的问题。
  • 您是否检查过其他设置中的类似行为?
  • @zaf 我尝试对系统中已存在的文件执行 copy() 和以下 filesize()。那里没问题。但是,没有在其他服务器上尝试。

标签: php file-upload filesize


【解决方案1】:

这个文件有多大?您正在做一份副本,然后立即说明该文件。会不会是这个问题?

内置 move_uploaded_file() 函数是否提供相同的行为?

【讨论】:

  • 只有 300kb。这似乎不是时间问题,因为“睡眠”没有帮助。
  • 这很奇怪。知道这里发生了什么会很有趣。
  • 接受了这个答案,因为“move_uploaded_file”解决了我的问题。
【解决方案2】:

试试这个:

copy($_FILES['binfile']['tmp_name'], $File);
clearstatcache();
$filesize = $_FILES['binfile']['size'];
echo '<hr>' . $filesize;

【讨论】:

  • 相信我,它有一个值 - 它有另一个值而不是 tmp_name,因为显然我不想将文件复制到它自己。
  • 因为这段代码正是我将问题浓缩为的内容。我使用的库需要文件名具有“.jpg”扩展名。
  • clearstatcache() 似乎有帮助。不过,我将无法使用 $_FILES...['size'],因为 - 正如我所说 - 还有另一个库,并且该库在内部深处使用文件大小。
  • 好吧,你可以创建一个可以休眠的函数,直到 file_exist 返回 true。如果file_exists($File) 函数返回真,那么filesize($File);
【解决方案3】:

这个怎么样:

copy($_FILES['binfile']['tmp_name'], $File);

clearstatcache();
while (empty(filesize($File)))
    sleep(2);

echo '<hr>' . filesize($File);

或者试试这个:

copy($_FILES['binfile']['tmp_name'], $File);

clearstatcache();
while (!file_exists($File))
    sleep(2);

echo '<hr>' . filesize($File);

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2013-05-07
    相关资源
    最近更新 更多