【问题标题】:How to Get Uploaded File Name with glob() Function?如何使用 glob() 函数获取上传的文件名?
【发布时间】:2017-12-04 05:41:40
【问题描述】:

我有一个表格供用户将文件上传到文件夹中。 HTML和PHP代码如下:

<form enctype="multipart/form-data" method="post" action="test.php">
  <input type="text" name="name"/><br/>
  <input type="file" name="photo" /><br/>
  <input type="submit"/>
</form>
<?php  //test.php
    move_uploaded_file($_FILES["photo"]["tmp_name"], "testFolder/".$_POST["name"]);
?>

上传表单效果很好,上传的文件在文件夹 testFolder/ 中。

现在我想使用 glob() 函数来获取文件夹中的所有文件名。

<?php
  foreach(glob("testFolder/*.*") as $file) {
    echo $file."<br/>";
  }
?>

但是,它不会回显任何内容。

glob() 函数适用于其他文件夹,其中包含现有文件,而不是上传的文件。

但是为什么它不能在这个文件夹中上传文件呢?

【问题讨论】:

  • 您总是做的第一件事是:查看您的 http 服务器错误日志文件。
  • 检查你使用glob()的文件夹路径
  • @arkascha 如何找到我的 http 服务器错误日志文件?我正在使用 Apache 服务器。
  • 查看您的 http 服务器配置。您正在寻找 ErrorLog 指令。标准配置类似于/var/log/apache2/...
  • @arkascha 我的错误日志没有显示与 glob() 文件相关的任何内容。但是访问日志显示: ::1 - - [30/Jun/2017:18:20:40 +0800] "GET /test.php HTTP/1.1" 200 - 这意味着什么?

标签: php filenames glob


【解决方案1】:

可能的通配符扩展可能是问题所在。

可能是 glob 不允许通配符扩展,我在文档中没有看到任何提及。你试过目录迭代器吗?

$dir = new DirectoryIterator(__DIR__.'/testFolder);
foreach ($dir as $file) {
    echo $file->getFilename();
}

更新:路径不是问题

您使用的是相对文件路径,因此 glob 可能找不到您要搜索的目录。

调用函数的脚本需要位于 'testFolder' 的父目录中,或者您需要使用这样的绝对路径。

<?php
  foreach(glob("/absolute/path/to/testFolder/*.*") as $file) {
    echo $file."<br/>";
  }
?>

如果您确实想使用相对路径,您可以执行以下操作:

<?php
  //__DIR__ is a PHP super constant that will get the absolute directory path of the script being ran

  // .. = relative, go up a folder level

  foreach(glob(__DIR__."/../testFolder/*.*") as $file) {
    echo $file."<br/>";
  }
?>

显然,上面的路径是示例,但应该能让你走上正确的道路。

希望对你有帮助

【讨论】:

  • 那为什么move_uploaded_file()调用使用相同的相对路径会成功?
  • 我认为它与相对路径无关。我试过 glob($_SERVER['DOCUMENT_ROOT']."/testFolder/*.*") 但它也不起作用....
  • @EdChen 如果您的两个脚本位于不同的文件夹中,它可能会。
  • 路径不是的问题,同意。所以回到问题的cmets......
  • 你可以使用扩展作为通配符与 glob 吗?我看不到任何提及它。也许你需要 DirectoryIterator 类
【解决方案2】:

因为我没有提供上传文件的扩展名,所以glob("testFolder/*.*") 什么也得不到。

两种解决方案:

  1. 为上传的文件添加扩展名。

$ext = strrchr($_FILES["photo"]["name"], ".");

move_uploaded_file($_FILES["photo"]["tmp_name"], "testFolder/".$_POST["name"].$ext);

然后,glob("testFolder/*.*") 将能够获取这些上传的带有扩展名的文件。

  1. 只需将glob("testFolder/*.*") 更改为glob("testFolder/*")

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    相关资源
    最近更新 更多