PHP: Get last directory name from path - php

I am writing one function for getting some different database query. Now things are going well but only need to get last directory name from defined path.
$qa_path=site_root('/learnphp/docs/');
I wan to get only docs from above path. Here site_root is nothing but $_SERVER['DOCUMENT_ROOT'] So how can I get only docs ?
Thanks

Easiest way would be to use basename($yourpath) as you can see here: http://php.net/basename

Provided answer doesn't work if your string contains the file at the end, like :
basename('/home/mypath/test.zip');
gives
test.zip
So if your string contains the file, don't forget to dirname it first
basename(dirname('/home/mypath/test.zip'));
gives
mypath

This is the easiest way:
<?php
echo basename(getcwd());
?>
getcwd() = give your full directory path
basename() = give you last directory

Try explode('/', '/learnphp/docs/')
to split the string into array locations. Then fetch the last location.
Here is more info:
http://php.net/manual/en/function.explode.php

you can use this simple snippet:
$qa_path=site_root('/learnphp/docs/');
$qa_path = explode("/", $qa_path);
$qa_path = $qa_path[count($qa_path) - 1];

$qa_path=explode('/', '/learnphp/docs/');
echo $qa_path[2]; // output docs

This will help you
$qa_path=site_root('/learnphp/docs/');
$q_path = explode ("/", $qa_path);
$lastV = end($q_path);

This gives you the current directory name:
echo basename(dirname(__FILE__));

Related

php remove the last "/" from the path

this is my code
$method = $_SERVER['PATH_INFO'];
and this is my path:
http://localhost:8082/XXXX/controllers/User.php/newUser?name=hello
the result of the method is /newUser
I would like to have just newUser. IE without the /
could you help me please
use ltrim on the variable you want ? Seems the easiest way to me
$var = ltrim($var,"/");
$method = ltrim($_SERVER['PATH_INFO'], '/');
$withoutSlash = substr($_SERVER['PATH_INFO'], 1);
Maybe your question already exist:
URL: PHP How to remove last part of a path
One solution:
preg_replace("/\/\w+$/i","",__DIR__);
# Note you may also need to add .DIRECTORY_SEPARATOR at the end.
Another solution:
dirname($path)
Documentation: http://ca3.php.net/dirname

how to view only file name by $_SERVER['PHP_SELF'] and not GET values appended with it

In one of my page image.php?id=somenumber , I am using <?php echo $_SERVER['PHP_SELF']; ?> to recognize this page in the common sidebar. But using this $_SERVER['PHP_SELF'] yields also the value of id as image.php?id=32 which I don't want.
How do I only get the filename?
$_SERVER['SCRIPT_NAME'], if you are using Apache at least, should cover what you need. It should be the executed script without the query string and relative to the document root (as opposed to SCRIPT_FILENAME, REQUEST_URI, or PHP_SELF.
$parts = explode('/', $_SERVER["SCRIPT_NAME"]);
$file = $parts[count($parts) - 1];
You can simply use this to cut off the query string:
$_SERVER['SELF']=array_shift(explode('?',$_SERVER['SELF']));
echo parse_url('http://dummy.com/'.$_SERVER['SELF'], PHP_URL_PATH);
The http://dummy.com/ part is only there because parse_url can't work with relative urls.
What version of PHP are you using? Mine (5.3.3) doesn't have $_SERVER['SELF'].
$_SERVER['PHP_SELF'] though gives the script name (image.php).
$fileName=explode("/",$_SERVER['SCRIPT_NAME']);
echo end($fileName);

How to extract substrings with PHP

PHP beginner's question.
I need to keep image paths as following in the database for the admin backend.
../../../../assets/images/subfolder/myimage.jpg
However I need image paths as follows for the front-end.
assets/images/subfolder/myimage.jpg
What is the best way to change this by PHP?
I thought about substr(), but I am wondering if there is better ways.
Thanks in advance.
you should save your image path in an application variable and can access from both admin and frontend
If ../../../../ is fixed, then substr will work. If not, try something like this:
newpath=substr(strpos(path, "assets"));
It might seem like an odd choice at first but you could use ltrim. In the following example, all ../'s will be removed from the beginning of $path.
The dots in the second argument have to be escaped because PHP would treat them as a range otherwise.
$path = ltrim('../../../../assets/images/subfolder/myimage.jpg', '\\.\\./');
$path will then be:
assets/images/subfolder/myimage.jpg
I suggest this
$path = "../../../../assets/images/subfolder/myimage.jpg";
$root = "../../../../";
$root_len = strlen($root);
if(substr($path, 0, $root_len) == $root){
echo substr($path, $root_len);
} else {
//not comparable
}
In this way you have a sort of control on which directory to consider as root for your images

basic question in foreach in php

basically if I have a string like this:
$str = \data1\data2\data3\data_tmp\file.pgp
can anyone tell me how to get the last part 'file.pgp'?
TIA.
You are looking for the basename() function.
This function takes a file path and returns the file name without the suffix (the final part of your file name that specifies its type)
$last = array_pop(explode('\\', $str));
You don't need foreach for that. It's used when you have to iterate through the whole collection (in your case, array).
If you need to get the remaining part of the string:
$segments = explode('\\', $str);
$last = array_pop($segments);
It will be in $segments, as an array. If you want to convert it back to a string, then use join('\\', $segments). However, if this is a Windows path and you're running PHP on Windows, then you should be using the basename and dirname functions.
perhaps pathinfo() will give you what you need
if that doesn't do it try
$path = str_replace('\\', '/', $path)
first

regexp get filename from url

url: http://blabla.bl/blabla/ss/sd/filename
How to get a filename?
http://us2.php.net/manual/en/function.basename.php
It works even on urls.
Use earcar's suggestion (basename) to get the filename.
BUT, if we're starting with a URL and the filename includes a query string, use Mauris's suggestion as well.
The query string will start with ? (that's how we know it's not part of the filename) and we can use
explode('?', basename($url));
This is summed up by the online PHP manual for basename
Given an arbitrary URL, I think you should use basename() together with parse_url(). Something like this:
$parsed_url = parse_url($url);
$path = $parsed_url['path'];
$filename = basename($path);
Yes it works, but last thing, sometimes basename is aaaa_somewhat. How to delete _somewhat?

Categories