文件大小(): 特定路径的 stat 失败 - PHP

20

我正在编写一个简单的文档管理脚本,需要在表格中获取文件大小和文件类型(文件或文件夹)。但是它无法在提到的目录中工作。如果可能,请帮忙解决:

    <?php
$path = "./documents";
$dh = dir($path);
while( ($file=$dh->read()) ) 
{
    if( $file=="." || $file=="..")continue;
    echo "<tr><td><a href='download.php?f=$file' title='Click to Open/Download'>$file</a></td>";
    echo "<td>";
    echo (is_file($file))? "<img src='file.jpg'/> FILE" : "<img src='folder.jpg'/> FOLDER ";
    echo "</td><td>" .filesize($file)."</td>";
    echo "<td><input type='checkbox' name='delete[]'/></td></tr>";
}
?>

实际上它有两个错误 - 一个是文件大小在位置上不起作用,如果我将其更改为路径“。”-一切都正常,但是如果我尝试更改到需要的文件夹/文档的位置时...一切都变得糟糕了,第二个问题是它也没有使用正确的图标文件,同样类型的问题。谢谢


$path = "../documents"; - underscore
尝试过,但它完全失效了../doc不能工作。 - Ivan M
2个回答

21

问题是$file只是文件名,没有目录前缀,因此对它进行检查不起作用。一种方法是使用一个变量保存绝对文件名 (比如说$realfile)。然后您需要修改代码并使用这个变量进行文件检查:

<?php
$path = "./documents";
$dh = dir($path);
while(($file=$dh->read()) !== false) {
    if( $file=="." || $file=="..") continue;
    // have a new variable for the real filepath
    $realfile = $path . "/" . $file;
    echo "<tr><td><a href='download.php?f=$file' title='Click to Open/Download'>$file</a></td>";
    echo "<td>";
    echo (is_file($realfile))? "<img src='file.jpg'/> FILE" : "<img src='folder.jpg'/> FOLDER ";
    echo "</td><td>" .filesize($realfile)."</td>";
    echo "<td><input type='checkbox' name='delete[]'/></td></tr>";
}
?>

哇!谢谢Jan - 就是这样了 - 太好了!祝你过一个愉快的假期兄弟! - Ivan M
这是左边的绿色勾号?还是右边的?我想现在已经被选中了。谢谢。我正在与同一段代码的另一个“小”问题作斗争 - 尝试通过php opendir()或类似方法提供两种选项,要么下载文件(href URL),要么在它是目录(文件夹)的情况下打开。你能给我一些思路吗? - Ivan M
是的,确实,它在左边是绿色的勾号。使用is_dir()检查目录。 - Jan

1
如果你仍然遇到这个错误,而且顶部的答案对你没有用。那么问题肯定是因为你的文件路径中有特殊字符,例如\r或\n。
尝试: $f = str_replace(Array("\n", "\r", "\n\r"), '', $f);
这是读取文件内容时经常出现的问题。

如果您有新的问题,请通过点击提问按钮来进行提问。如果链接有助于提供上下文,请包含这个问题的链接。- [来自评论审核] (/review/late-answers/30042389) - Jörg Brüggmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接