|
pathinfo
Returns information about a file path
(PHP 4 >= 4.0.3, PHP 5)
Example 664. pathinfo() Example<?php The above example will output: /www/htdocs Related Examples ( Source code ) » pathinfo Examples ( Source code ) » pathinfo Code Examples / Notes » pathinfoavi-team
You shouldn't assign values as it is described in previous post // wrong: list( $dirname, $basename, $extension, $filename ) = array_values( pathinfo($file) ); if $file has no extension, you get wrong variable values: $extension would be assigned with 'filename' array element of pathinfo() result, but $filename - would be empty. albertof
This code is to work in index.php/var/var if(isset($PATH_INFO)) { $viewcode = explode('/', $PATH_INFO); $num = count($viewcode); if($num % 2 == 0) { $viewcode[] = ''; $num++; } for($i = 1; $i < $num; $i += 2) { $$viewcode[$i] = $viewcode[$i+1]; } } cochise_chiracahua
Sometimes, it's interessant to get the basename without extension. So, I appended a new entry 'basenameWE' (Basename Without Extension) to the returned array. <?php // pathinfo improved function pathinfo_im($path) { $tab = pathinfo($path); $tab["basenameWE"] = substr($tab["basename"],0 ,strlen($tab["basename"]) - (strlen($tab["extension"]) + 1) ); return $tab; } $my_path = "/var/www/html/example.html"; echo "<pre>\n"; print_r( pathinfo_im($my_path) ); echo "</pre>\n"; ?> Out : Array ( [dirname] => /var/www/html [basename] => example.html [extension] => html [basenameWE] => example ) sgermain
It is true that if you put a directory into pathinfo, usually the extension is empty. But, if the directory name is /www/example.com/ for example, you will have the following output: Array ( [dirname] => /www [basename] => example.com [extension] => com ) So, it is the same as a file. phpnet
If you want to easily assign the values returned by pathinfo to separate variable names, list isn't enough. You can use array_values() first to convert the associative array into the indexed array that list() expects: // throws notices, variables aren't set list( $dirname, $basename, $extension, $filename ) = pathinfo($file); // works list( $dirname, $basename, $extension, $filename ) = array_values( pathinfo($file) ); 03-dec-2004 12:39
If you want only the file extension, use this: <?php $extension = substr(strrchr($filename, "."), 1); ?> This is many times faster than using pathinfo() and getting the value from array. mikep
If you run this on a directory, basename is the last directory in the path, dirname is the path before the final directory and extension is empty.
n0dalus
If a file has more than one 'file extension' (seperated by periods), the last one will be returned. For example: <?php $pathinfo = pathinfo('/dir/test.tar.gz'); echo 'Extension: '.$pathinfo['extension']; ?> will produce: Extension: gz and not tar.gz anders.jenbo pc.dk
Heres a funciton to get the same results from php 4+ but you will have to call pathinfo_filename() instead of pathinfo(). <?php if(version_compare(phpversion(), "5.2.0", "<")) { function pathinfo_filename($path) { $temp = pathinfo($path); if($temp['extension']) $temp['filename'] = substr($temp['basename'],0 ,strlen($temp['basename'])-strlen($temp['extension'])-1); return $temp; } } else { function pathinfo_filename($path) { return pathinfo($path); } } ?> m-symons
Here's a neat wee function to grab the relative path to root (especially useful if you're using mock-directories to pass variables into scripts with mod_rewrite). The function simply iterates through every occurence of "/" within the REQUEST_URI environment variable, appending "../" to the output for every instance: <?php function path_to_root($path) { $pathinfo = pathinfo($path); $deep = substr_count($pathinfo[dirname], "/"); $path_to_root = "./"; for($i = 1; $i <= $deep; $i++) { $path_to_root .= "../"; } return $path_to_root; } path_to_root($REQUEST_URI); ?> rob
Further to my previous post. This affects servers that run PHP as a cgi module If you have your own server: You can use the AcceptPathInfo directive to force the core handler to accept requests with PATH_INFO and thereby restore the ability to use PATH_INFO in server-side includes. Further information: http://httpd.apache.org/docs-2.0/mod/core.html#acceptpathinfo junk
Convert a URL to the local file path and vice versa, convert a local file path to a URL. // this sets the sytem / or \ : strstr( PHP_OS, "WIN") ? $slash = "\\" : $slash = "/"; // This is the location of the php file that contains this // function. Usually this request is made to files/folders // down the directory structure, so the php file that // contains these functions is a good "where am i" // reference point: $WIMPY_BASE['path']['physical'] = getcwd(); $WIMPY_BASE['path']['www'] = "http://".$_SERVER['HTTP_HOST']; function url2filepath($theURL){ global $WIMPY_BASE, $slash; $AtheFile = explode ("/", $theURL); $theFileName = array_pop($AtheFile); $AwimpyPathWWW = explode ("/", $WIMPY_BASE['path']['www']); $AtheFilePath = array_values (array_diff ($AtheFile, $AwimpyPathWWW)); if($AtheFilePath){ $theFilePath = $slash.implode($slash, $AtheFilePath).$slash.$theFileName; } else { $theFilePath = implode($slash, $AtheFilePath).$slash.$theFileName; } return ($WIMPY_BASE['path']['physical'].$theFilePath); } function filepath2url ($theFilepath){ global $WIMPY_BASE, $slash; $AtheFile = explode ($slash, $theFilepath); $theFileName = array_pop($AtheFile); $AwimpyPathFILE = explode ($slash, $WIMPY_BASE['path']['physical']); $AtheFilePath = array_values (array_diff ($AtheFile, $AwimpyPathFILE)); $thFileURL = implode("/", $AtheFilePath)."/".$theFileName; return ($WIMPY_BASE['path']['www']."$thFileURL"); } m-symons
And, of course, to account for the problem noted in the first post whereby calling a directory, not a file, messes with the output of pathinfo(), you can include the following test: if($pathinfo[extension] == "") { $deep++; } Ooops...sorry for missing that. |
Change Languagebasename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputcsv fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable lchgrp lchown link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink |