如何使用glob()函数获取上传的文件名?

时间:2017-06-30 09:45:36

标签: php filenames glob

我有一个表单供用户将文件上传到该文件夹​​中。 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()函数适用于其他文件夹,其中包含现有文件,而不包含上传文件。

但是为什么它不能用于上传文件的这个文件夹呢?

2 个答案:

答案 0 :(得分:0)

Possbile通配符扩展可能是个问题。

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

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

更新:路径不是问题

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

调用该函数的脚本需要位于&lt; testFolder &#39;的父目录中。或者你需要使用这样的绝对路径。

<?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/>";
  }
?>

显然上面的路径只是示例,但应该让你走上正轨。

希望这有帮助

答案 1 :(得分:0)

因为我没有为上传的文件提供扩展名,所以String没有得到任何内容。

两种解决方案:

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

    $ ext = strrchr($ _ FILES [“photo”] [“name”],“。”);

         

    move_uploaded_file($ _ FILES [ “相片”] [ “tmp_name的值”],   “testFolder /".$_ POST [” 名称“] $ EXT);

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

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