想要求两个目录的相对路径,可以借助PHP中的realpath()
和str_replace()
等函数。
首先,使用realpath()
函数获取两个目录的绝对路径。比如:
$path1 = realpath('/usr/local/bin/'); // 获取/usr/local/bin/的绝对路径
$path2 = realpath('/etc/apache2/'); // 获取/etc/apache2/的绝对路径
接下来,使用str_replace()
函数将两个目录的共同前缀去掉。需要注意的是,由于realpath()
函数返回的路径中最后一个字符可能是斜杠,因此在替换时需要将斜杠去掉。示例代码如下:
$prefix = str_replace('\\', '/', dirname(__FILE__)) . '/'; // 获取当前文件所在的目录,并加上末尾的斜杠
$path1 = str_replace($prefix, '', $path1); // 去掉$path1中与当前目录相同的部分
$path2 = str_replace($prefix, '', $path2); // 去掉$path2中与当前目录相同的部分
这样,就可以得到两个目录的相对路径了。下面给出一个完整的示例:
$path1 = realpath('/usr/local/bin/'); // 获取/usr/local/bin/的绝对路径
$path2 = realpath('/etc/apache2/'); // 获取/etc/apache2/的绝对路径
$prefix = str_replace('\\', '/', dirname(__FILE__)) . '/'; // 获取当前文件所在的目录,并加上末尾的斜杠
$path1 = str_replace($prefix, '', $path1); // 去掉$path1中与当前目录相同的部分
$path2 = str_replace($prefix, '', $path2); // 去掉$path2中与当前目录相同的部分
echo '路径1:' . $path1 . PHP_EOL;
echo '路径2:' . $path2 . PHP_EOL;
输出:
路径1:../../usr/local/bin/
路径2:../../etc/apache2/
另外,还可以借助第三方包来简化获取两个目录的相对路径。比如,symfony/filesystem
组件中提供了Symfony\Component\Filesystem\Filesystem::makePathRelative()
方法,可以直接获取两个目录的相对路径。示例代码如下:
use Symfony\Component\Filesystem\Filesystem;
$filesystem = new Filesystem();
$path1 = '/usr/local/bin/';
$path2 = '/etc/apache2/';
$relativePath = $filesystem->makePathRelative($path2, $path1);
echo '相对路径:' . $relativePath . PHP_EOL;
输出:
相对路径:../../etc/apache2/
这样,就可以方便地获取两个目录的相对路径了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php求两个目录的相对路径示例(php获取相对路径) - Python技术站