服务器之家

服务器之家 > 正文

PHP文件操作之获取目录下文件与计算相对路径的方法

时间:2020-12-15 16:04     来源/作者:markely

获取目录文件

1、获取目录下文件,不包括子目录

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//获取某目录下所有文件、目录名(不包括子目录下文件、目录名)
  $handler = opendir($dir);
  while (($filename = readdir($handler)) !== false) {//务必使用!==,防止目录下出现类似文件名“0”等情况
    if ($filename != "." && $filename != "..") {
        $files[] = $filename ;
      }
    }
  }
  closedir($handler);
    
//打印所有文件名
foreach ($filens as $value) {
  echo $value."<br />";
}

2、获取目录下所有文件,包括子目录

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function get_allfiles($path,&$files) {
  if(is_dir($path)){
    $dp = dir($path);
    while ($file = $dp ->read()){
      if($file !="." && $file !=".."){
        get_allfiles($path."/".$file, $files);
      }
    }
    $dp ->close();
  }
  if(is_file($path)){
    $files[] = $path;
  }
}
   
function get_filenamesbydir($dir){
  $files = array();
  get_allfiles($dir,$files);
  return $files;
}
   
$filenames = get_filenamesbydir("static/image/");
//打印所有文件名,包括路径
foreach ($filenames as $value) {
  echo $value."<br />";
}

 

计算两个文件之间的相对路径方法
php 计算两个文件之间的相对路径方法

例如:
文件A 的路径是 /home/web/lib/img/cache.php
文件B的路径是 /home/web/api/img/show.php
那么,文件A相对于文件B的路径是 ../../lib/img/cache.php,即文件B 访问 文件A的相对路径。

function getRelativePath

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
/** 计算path1 相对于 path2 的路径,即在path2引用paht1的相对路径
* @param String $path1
* @param String $path2
* @return String
*/
function getRelativePath($path1, $path2){
  $arr1 = explode('/', $path1);
  $arr2 = explode('/', $path2);
 
  // 获取相同路径的部分
  $intersection = array_intersect_assoc($arr1, $arr2);
 
  $depth = 0;
 
  for($i=0,$len=count($intersection); $i<$len; $i++){
    if(!isset($intersection[$i])){
      $depth = $i;
      break;
    }
  }
 
  // 将path2的/ 转为 ../,path1获取后面的部分,然后合拼
  $tmp = array_merge(array_fill(0, count($arr2)-$depth-1, '..'), array_slice($arr1, $depth));
 
  $relativePath = implode('/', $tmp);
 
  return $relativePath;
}
?>

demo

?
1
2
3
4
5
6
<?php
$path1 = '/home/web/lib/img/cache.php';
$path2 = '/home/web/api/img/show.php';
 
echo getRelativePath($path1, $path2); // ../../lib/img/cache.php
?>

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
返回顶部