mus
mus

Reputation: 51

How to remove path after domain name from string

I have the following code :

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:///

Now my problem is that when there is only only a domain without folders or filenames my function removes website.com too.

My idea is there is any way on php to tell my function to do the work only after third slash or any other solutions you think useful.

Upvotes: 3

Views: 1149

Answers (5)

Shahzad Barkati
Shahzad Barkati

Reputation: 2526

UPDATED : ( working and tested )

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

Output:

http://website.com/folder/
http://website.org/folder/
http://website.com/

Upvotes: 2

Andre
Andre

Reputation: 385

Close to the answer of 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;
}

Upvotes: 0

splash58
splash58

Reputation: 26153

pathinfo cant recognize only domain and file name. But if without filename url is ended by slash

$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

Upvotes: 0

Saty
Saty

Reputation: 22532

Since filename is at last slash you can use substr and str_replace to remove file name from path.

$PATH = "http://website.com/folder/filename.php";

$file = substr( strrchr( $PATH, "/" ), 1) ; 
echo $dir = str_replace( $file, '', $PATH ) ;

OUTPUT

http://website.com/folder/

Upvotes: 0

Matthew Way
Matthew Way

Reputation: 351

Sounds like you are wanting to replace a substring and not the whole thing. This function might help you:

http://php.net/manual/en/function.substr-replace.php

Upvotes: 0

Related Questions