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?
Related
A very simple problem which might have been solved here a lot of time, but I'm not getting what I want.
I have an image url like this:
$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg';
and want output in this form
http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg
Yes ofcourse you will tell me I can use urlencode or rawurlencode. Believe me I've tried and still no luck.
With urlencode I get like this
http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor+Her%2FBelieve+100ml+EDP-150x150.jpg
And with rawurlencode I received output like this:
http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor%20Her%2FBelieve%20100ml%20EDP-150x150.jpg
With str_replace I can get exactly what I want like this:
str_replace('+', '%20', $image);
will result: http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg
but I want to get them using urlencode or rawurlencode. But these functions encode even slash / part as well.
Is there any way to url encode only spaces in the url?
Edit: Yes i can use basename() or pathinfo to encode only part of the url. But the directory name might also contain the space character, so converting only filename is also not a possibility here.
And actually I want to know if we can use urlencode, or rawurlencode in full url without affecting the '/' of the fullurl. I don't want the regex suggestions eigher.
Note: The complication part is that 'For Her' directory section in the url path, and the level of directory is also not fixed.
What you need is rawurlencode(), but only encode the necessary part of your url.
Example:
$image = sprintf(
'http://perfumepalace.arctechsolution.com/image/cache/data/another/%s/%s',
rawurlencode('For Her'),
rawurlencode('Believe 100ml EDP-150x150.jpg')
);
But if you still want to apply to the whole url string, you could do like below:
function my_url_encode($url) {
$info = parse_url($url);
return sprintf('%s://%s/%s',
$info['scheme'],
$info['host'],
implode('/', array_map('rawurlencode', explode('/', $info['path']))));
}
UrlEncode should be used only when encoding a string to be used in query of the url.
So my suggestion here is for you to keep with the str_replace('+', '%20', $image); code, as you have the full url and not only the query part.
The other option is to parse the url, extract the path, encode it and rebuild the url, here is one example:
$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg'
$path = parse_url($image, PHP_URL_PATH);//extract the path
$epath = rawurlencode($path);//encode it
$enc_image = 'http://perfumepalace.arctechsolution.com/'.$epath;//build the new url
Try this:
$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg';
$parts = parse_url($image);
$image_path = explode('/',$parts['path']);
foreach($image_path as $key => $image_path_part){
$image_path[$key] = rawurlencode($image_path_part);
}
echo $parts['scheme']."://".$parts['host'].implode('/',$image_path);
Output: http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg
Have a nice day!!
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__));
Following returns empty array, so on my localhost $_SERVER[] doesn't return anything. Why?
Url in browser looks like this: localhost/final/events/2012-10/
$current_url_all = parse_url($_SERVER['PATH_INFO']);
print_r($current_url_all);
What am I doing wrong? How else can I grab that last date piece from url?
Try to use $_SERVER["REQUEST_URI"] instad, $_SERVER['PATH_INFO'] seems to be just aviable if you invoke the script like a directory:
http://example.org/script.php/foo
You might want to use
$_SERVER['REQUEST_URI']
u can manipulate the string. use strpos to get the position of localhost/final/events/ then substring to get the rest.
also u can use $end = end((explode('/', $url)));
then get the last value from the array
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);
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