29

我怎样才能返回文件名。$image 正在打印绝对路径名?

<?php
$directory = Yii::getPathOfAlias('webroot').'/uploads/';
$images = glob($directory . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
 foreach($images as $image)
   echo $image
?>

我想要的只是特定目录中的文件名而不是绝对名称。

4

7 回答 7

55

使用 php 的基本名称

返回路径的尾随名称组件

<?php
$directory = Yii::getPathOfAlias('webroot').'/uploads/';
$images = glob($directory . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
 foreach($images as $image)
   echo basename($image);
?>
于 2013-01-16T20:11:51.997 回答
28

代替basename,您可以在 glob 之前使用 chdir,因此结果不包含路径,例如:

<?php
$directory = Yii::getPathOfAlias('webroot').'/uploads/';
chdir($directory); // probably add some error handling around this
$images = glob("*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
 foreach($images as $image)
   echo $image;
?>

这可能会快一点,但除非您有大量文件,否则不会有任何显着差异

于 2013-01-16T20:57:09.467 回答
23

单线:

$images = array_map('basename', glob($directory . "*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE));
于 2015-01-26T16:38:40.573 回答
19

利用basename()

echo basename($image);

您还可以像这样删除扩展名:

echo basename($image, '.php');
于 2013-01-16T20:12:05.647 回答
3

看看路径信息

http://php.net/manual/en/function.pathinfo.php

很有帮助的功能

于 2013-01-16T20:12:10.003 回答
1

如果您对更改工作目录的意外后果感到紧张,您可以getcwd()在更改之前存储当前目录,然后在您完成该目录中需要执行的所有操作后,只需使用该值切换回来。

  <?php
  $directory = Yii::getPathOfAlias('webroot').'/uploads/';
  $working_dir = getcwd();
  chdir($directory);
  $files = glob("*.{jpg,JPG,jpeg,JPEG,png,PNG}", GLOB_BRACE);
  chdir($working_dir);
  ?>
于 2018-06-03T11:58:44.827 回答
0

示例仅提取文件名并转换为新的文件名宽度扩展数组。

$dir =  get_stylesheet_directory();//some dir - example of getting full path dir in wordpress
$filesPath = array_filter(glob($dir . '/images/*.*'), 'is_file');

$files = array();       
foreach ($filesPath as $file) 
{
   array_push($files, basename($file));
}
于 2014-02-19T13:32:54.847 回答