我有以下代码:
function removeFilename($url)
{
$file_info = pathinfo($url);
return isset($file_info['extension'])
? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url)
: $url;
}
$url1 = "http://website.com/folder/filename.php";
$url2 = "http://website.com/folder/";
$url3 = "http://website.com/";
echo removeFilename($url1); //outputs http://website.com/folder/
echo removeFilename($url2);//outputs http://website.com/folder/
echo removeFilename($url3);//outputs http:///
现在我的问题是,当只有一个没有文件夹或文件名的域时,我的功能也会删除website.com。
我的想法是,有任何方法让PHP告诉我的功能只有在你认为有用的第三个斜杠或任何其他解决方案之后才能完成工作。
答案 0 :(得分:2)
更新:(工作和测试)
<?php
function removeFilename($url)
{
$parse_file = parse_url($url);
$file_info = pathinfo($parse_file['path']);
return isset($file_info['extension'])
? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url)
: $url;
}
$url1 = "http://website.com/folder/filename.com";
$url2 = "http://website.org/folder/";
$url3 = "http://website.com/";
echo removeFilename($url1); echo '<br/>';
echo removeFilename($url2); echo '<br/>';
echo removeFilename($url3);
?>
<强>输出:强>
http://website.com/folder/
http://website.org/folder/
http://website.com/
答案 1 :(得分:0)
听起来你想要替换子串而不是整个东西。此功能可能对您有所帮助:
答案 2 :(得分:0)
pathinfo无法识别域名和文件名。但如果没有文件名url以斜杠结束
$a = array(
"http://website.com/folder/filename.php",
"http://website.com/folder/",
"http://website.com",
);
foreach ($a as $item) {
$item = explode('/', $item);
if (count($item) > 3)
$item[count($item)-1] ='';;
echo implode('/', $item) . "\n";
}
result
http://website.com/folder/
http://website.com/folder/
http://website.com
答案 3 :(得分:0)
由于文件名是最后一个斜杠,您可以使用substr
和str_replace
从路径中删除文件名。
$PATH = "http://website.com/folder/filename.php";
$file = substr( strrchr( $PATH, "/" ), 1) ;
echo $dir = str_replace( $file, '', $PATH ) ;
<强>输出强>
答案 4 :(得分:0)
接近splash58的答案
function getPath($url) {
$item = explode('/', $url);
if (count($item) > 3) {
if (strpos($item[count($item) - 1], ".") === false) {
return $url;
}
$item[count($item)-1] ='';
return implode('/', $item);
}
return $url;
}