|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
basename (PHP 3, PHP 4, PHP 5) basename -- Zwraca nazwę pliku, będącego składową ścieżki Opisstring basename ( string ścieżka [, string przyrostek] )
Z podanego łańcucha zawierającego ścieżkę do pliku, funkcja
zwraca samą nazwę pliku.
Jeśli koniec nazwy pliku pasuje do parametru przyrostek
to zostanie on także obcięty.
W Windows jako separator katalogów używany jest znak slash
(/) i backslash (\). W
innych środowiskach jest to slash (/).
Przykład 1. basename() przykład |
<?php
$path = "/home/httpd/html/index.php";
$file = basename ($path); $file = basename ($path, ".php"); ?>
|
|
Notatka:
Parametr przyrostek został dodany w PHP 4.1.0.
Patrz także: dirname().
User Contributed Notesponiestail at gmail dot com
05-Jan-2006 01:18
examples from "icewind" and "basname" seem highly overdone... not to mention example from "basename" is exactly the same as one from "icewind"...
possibly a more logical approach?
<?
$filename = substr( $_SERVER["SCRIPT_NAME"], 1 ); $query = $_SERVER["QUERY_STRING"];
?>
to see the entire $_SERVER variable try this:
<?
echo "<pre>
".print_r( $_SERVER, true )."
</pre>
";
?>
15-Nov-2005 01:57
icewinds exmaple wouldn't work, the query part would contain the second char of the filename, not the query part of the url.
<?
$file = "path/file.php?var=foo";
$file = explode("?", basename($file));
$query = $file[1];
$file = $file[0];
?>
That works better.
icewind
02-Nov-2005 09:44
Because of filename() gets "file.php?var=foo", i use explode in addition to basename like here:
$file = "path/file.php?var=foo";
$file = explode("?", basename($file));
$file = $file[0];
$query = $file[1];
Now $file only contains "file.php" and $query contains the query-string (in this case "var=foo").
www.turigeza.com
24-Oct-2005 09:47
simple but not said in the above examples
echo basename('somewhere.com/filename.php?id=2', '.php');
will output
filename.php?id=2
which is not the filename in case you expect!
crash at subsection dot org dot uk
22-Sep-2005 09:38
A simple way to return the current directory:
$cur_dir = basename(dirname($_SERVER[PHP_SELF]))
since basename always treats a path as a path to a file, e.g.
/var/www/site/foo/ indicates /var/www/site as the path to file
foo
tomboshoven at gmail dot com
05-Sep-2005 03:53
b_r_i_a__n at locallinux dot com
23-Aug-2005 02:47
I was looking for a way to get only the filename whether or not I had received the full path to it from the user. I came up with a much simpler (and probably more robust) method by using the power of basename in reverse:
$infile = "/usr/bin/php";
$filename = stristr ($infile,basename ($infile));
This even works on those _wacky_ filenames like "/usr/lib/libnetsnmp.so.5.0.9" which are not factored when exploding the full path and taking out only the last segment after "."
pvollma at pcvsoftware dot net
14-Jul-2005 06:28
Note that in my example below, I used the stripslashes function on the target string first because I was dealing with the POST array $_FILES. When creating this array, PHP will add slashes to any slashes it finds in the string, so these must be stripped out first before processing the file path. Then again, the only reason I can think of that basename() would fail is when dealing with Windows paths on a *nix server -- and the file upload via POST is the only situation I can think of that would require this. Obviously, if you are not dealing with these additional slashes, invoking stripslashes() first would remove the very separators you need extract the file name from the full path.
amitabh at NOSPAM dot saysnetsoft dot com
14-Jul-2005 10:55
The previous example posted by "pvollma" didn't work out for me, so I modified it slightly:
<?php
function GetFileName($file_name)
{
$newfile = basename($file_name);
if (strpos($newfile,'\\') !== false)
{
$tmp = preg_split("[\\\]",$newfile);
$newfile = $tmp[count($tmp) - 1];
return($newfile);
}
else
{
return($file_name);
}
}
?>
pvollma at pcvsoftware dot net
13-Jul-2005 08:43
There is a real problem when using this function on *nix servers, since it does not handle Windows paths (using the \ as a separator). Why would this be an issue on *nix servers? What if you need to handle file uploads from MS IE? In fact, the manual section "Handling file uploads" uses basename() in an example, but this will NOT extract the file name from a Windows path such as C:\My Documents\My Name\filename.ext. After much frustrated coding, here is how I handled it (might not be the best, but it works):
<?php
$filen = stripslashes($_FILES['userfile']['name']);
$newfile = basename($filen);
if (strpos($newfile,'\\') !== false) {
$tmp = preg_split("[\\\]",$newfile);
$newfile = $tmp[count($tmp) - 1];
}
?>
$newfile will now contain only the file name and extension, even if the POSTed file name included a full Windows path.
KOmaSHOOTER at gmx dot de
30-Jan-2005 03:18
if you want the name of the parent directory
<?php
$_parenDir_path = join(array_slice(split( "/" ,dirname($_SERVER['PHP_SELF'])),0,-1),"/").'/'; $_parenDir = basename ($_parenDir_path,"/"); $_parenDir2 = array_pop(array_slice(split( "/" ,dirname($_SERVER['PHP_SELF'])),0,-1)); echo('$_parenDir_path = '.$_parenDir_path.'<br>');
echo('$_parenDir = '.$_parenDir.'<br>');
echo('$_parenDir2 = '.$_parenDir2.'<br>');
?>
KOmaSHOOTER at gmx dot de
30-Jan-2005 01:24
If you want the current path where youre file is and not the full path then use this :)
<?php
echo('dir = '.basename (dirname($_SERVER['PHP_SELF']),"/"));
?>
Example:
www dir: domain.com/temp/2005/january/t1.php
<?php
echo('dirname <br>'.dirname($_SERVER['PHP_SELF']).'<br><br>');
?>
<?php
echo('file = '.basename ($PHP_SELF,".php"));
?>
if you combine these two you get this
<?php
echo('dir = '.basename (dirname($_SERVER['PHP_SELF']),"/"));
?>
And for the full path use this
<?php
echo(' PHP_SELF <br>'.$_SERVER['PHP_SELF'].'<br><br>');
?>
antrik at users dot sf dot net
15-Nov-2004 07:40
When using basename() on a path to a directory ('/bar/foo/'), the last path component ('foo') is returned, instead of the empty string one would expect. (Both PHP 4.1.2 and 4.3.8 on GNU/Linux.) No idea whether this is considered a bug or a feature -- I found it extremely annoying. Had to work around using: <?php $file=substr($path, -1)=='/'?'':basename($path) ?> Watch out!
osanim at cidlisuis dot org
17-Apr-2004 08:12
If you want know the real directory of the include file, you have to writte:
<?php
dirname(__FILE__)
?>
KOmaSHOOTER at gmx dot de
28-Nov-2003 11:33
Exmaple for exploding ;) the filename to an array
<?php
echo(basename ($PHP_SELF)."<br>"); $file = basename ($PHP_SELF);
$file = explode(".",$file);
print_r($file); echo("<br>");
$filename = basename(strval($file[0]),$file[1]);
echo($filename."<br>"); echo(basename ($PHP_SELF,".php")."<br>"); echo("<br>");
echo("<br>");
show_source($file[0].".".$file[1])
?>
giovanni at giacobbi dot net
08-Nov-2003 04:52
No comments here seems to take care about UNIX system files, which typically start with a dot, but they are not "extensions-only".
The following function should work with every file path. If not, please let me know at my email address.
<?php
function remove_ext($str) {
$noext = preg_replace('/(.+)\..*$/', '$1', $str);
print "input: $str\n";
print "output: $noext\n\n";
}
remove_ext("/home/joh.nny/test.php");
remove_ext("home/johnny/test.php");
remove_ext("weirdfile.");
remove_ext(".hiddenfile");
remove_ext("../johnny.conf");
daijoubu_NOSP at M_videotron dot ca
16-Oct-2003 07:22
An faster alternative to:
<?php
array_pop(explode('.', $fpath));
?>
would be:
<?php
substr($fpath, strrpos($fpath, '.')); ?>
If you don't want the dot, simply adds 1 to the position
<?php
substr($fpath, strrpos($fpath, '.') + 1); ?>
travis dot kroh at ndsu dot nodak dot edu
19-May-2003 11:12
<?php
$foo="/path/to/file.ext";
echo $foo."<br />";
$bar=$foo;
echo basename($bar,".ext")."<br />";
echo $foo."<br />";
echo $bar."<br />";
?>
Will display:
/path/to/file.ext
file
/path/to/file
/path/to/file
Which is probably not expected behavior, as
it returns one thing, changes the variable
to produce something else, and also modifies
BOTH variables in memory.
To avoid this, use:
basename(strval($bar),".ext")
Richard at Lyders dot Net
01-Apr-2003 11:53
you can also make use of the basename() function's second parameter:
<?PHP
$fpath = "/blah/file.name.has.lots.of.dots.ext";
$fext = array_pop(explode('.', $fpath));
$fname = basename($fpath, '.'.$fext);
print "fpath: $fpath\n<br>";
print "fext: $fext\n<br>";
print "fname: $fname\n<br>";
?>
|