PHP文件操作之获取目录下文件与计算相对路径的方法
获取目录下文件
1、获取目录下文件,不包括子目录
//获取某目录下所有文件、目录名(不包括子目录下文件、目录名) $handler=opendir($dir); while(($filename=readdir($handler))!==false){//务必使用!==,防止目录下出现类似文件名“0”等情况 if($filename!="."&&$filename!=".."){ $files[]=$filename; } } } closedir($handler); //打印所有文件名 foreach($filensas$value){ echo$value."<br/>"; }
2、获取目录下所有文件,包括子目录
functionget_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; } } functionget_filenamesbydir($dir){ $files=array(); get_allfiles($dir,$files); return$files; } $filenames=get_filenamesbydir("static/image/"); //打印所有文件名,包括路径 foreach($filenamesas$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的相对路径。
functiongetRelativePath
<?php /**计算path1相对于path2的路径,即在path2引用paht1的相对路径 *@paramString$path1 *@paramString$path2 *@returnString */ functiongetRelativePath($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
<?php $path1='/home/web/lib/img/cache.php'; $path2='/home/web/api/img/show.php'; echogetRelativePath($path1,$path2);//../../lib/img/cache.php ?>