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 ?>