|
Filesystem Functions
No external libraries are needed to build this extension, but if you want
PHP to support LFS (large files) on Linux, then you need to have a recent
glibc and you need compile PHP with the following compiler flags:
The behaviour of these functions is affected by settings in Table 90. Filesystem and Streams Configuration Options
Here's a short explanation of the configuration directives.
The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.
For related functions, see also the Directory and Program Execution sections. For a list and explanation of the various URL wrappers that can be used as remote files, see also Appendix O, List of Supported Protocols/Wrappers. Table of Contents
Code Examples / Notes » ref.filesystemjdhurn
This is a function I use to determine if a file contains Binary information. I use this for my search engine so that it doesn't try to index files like .zip or .mp3 or any other file that doesn't contain readable information. It makes use of the Character Type Extension if it's loaded, if it's not then it uses Regular Expressions. function is_binary($link) { $tmpStr = ''; @$fp = fopen($link, 'rb'); @$tmpStr = fread($fp, 256); @fclose($fp); if($tmpStr != '') { $tmpStr = str_replace(chr(10), '', $tmpStr); $tmpStr = str_replace(chr(13), '', $tmpStr); $tmpInt = 0; for($i =0; $i < strlen($tmpStr); $i++) { if( extension_loaded('ctype') ) { if( !ctype_print($tmpStr[$i]) ) $tmpInt++; } else { if( !eregi("[[:print:]]+", $tmpStr[$i]) ) $tmpInt++; } } if($tmpInt > 5) return(0); else return(1); } else return(0); } gregor mosheh
This function searches a directory and returns an array of all files whose filename matches the specified regular expression. It's similar in concept to the Unix find program. function findfile($location='',$fileregex='') { if (!$location or !is_dir($location) or !$fileregex) { return false; } $matchedfiles = array(); $all = opendir($location); while ($file = readdir($all)) { if (is_dir($location.'/'.$file) and $file <> ".." and $file <> ".") { $subdir_matches = findfile($location.'/'.$file,$fileregex); $matchedfiles = array_merge($matchedfiles,$subdir_matches); unset($file); } elseif (!is_dir($location.'/'.$file)) { if (preg_match($fileregex,$file)) { array_push($matchedfiles,$location.'/'.$file); } } } closedir($all); unset($all); return $matchedfiles; } $htmlfiles = findfile('/some/dir','/\.(htm|html)$/'); storm reaver
The way to write files on server where it is not possible (e.g. Gorodok.net) <?php function killfile($ftp, $login, $pass, $filename){ $conn_id = ftp_connect($ftp); $login_result = ftp_login($conn_id, $login, $pass); if ((!$conn_id) || (!$login_result)) { return false; } else { $del = ftp_delete($conn_id, $filename); if (!del) { return false; } else {return true;} } ftp_close($conn_id); } killfile("gorodok.net", "login", "password", "/path/file.extension"); // Erasing file on server $fs = fopen("ftp://login:password@gorodok.net/path/file.extension", "w"); // Opening file for writing // You can't open file 4 writing without 'killfile' function because there must be no such file on server for fopen write mode via FTP/ // Here we write what we need fclose($fs); ?> ken
The following will work on UNIX (from peeweeks code submitted for "Windows")--- function ls ($curpath) { $dir = dir($curpath); echo("<b>$curpath</b>"); echo "<blockquote>"; while ($file = $dir->read()) { if($file != "." && $file != "..") { if (is_dir($curpath.$file)) { ls($curpath.$file."/"); } else { echo("$file "); } } } $dir->close(); echo "</blockquote>"; return; } //Use: $startpath = "/home/mypath/"; ls($startpath); codatrix
The following underlisted function called "fcountext" is a function I wrote, for counting the number of file extensions within a given directory. Hope you find it satisfactory as there is no alternative solution via PHP's core filesystem's functions for counting the number of file extensions within a given directory. <?php /* * Author: ORUNTA C. N. * Email: codatrix@yahoo.com * * Name: fcountext() * Function: To count the number of file extensions within a given directory. * Argument(s): $dir, i.e. directory path - for e.g. 'htdocs/yahoo/' * Return-type: Integer */ function fcountext($dir) { //Authenticate - if directory? if(is_dir($dir)) { //Open and establish directory handle/pointer $dp = opendir($dir); //Create extensible array $afile = array(); //Set initializer array; $i = 0; //Read contents of directory into array $afile, thus: while($content = readdir($dp)) { //Concatenate filepath $filepath = $dir.$content; //Confirm any initial value within array... if(!count($afile)) { //Authenticate - if file? if(is_file($filepath)) { //Get extension using PHP's 'pathinfo' $pathinfo = pathinfo($filepath); //Store into the array $afile[$i] = $pathinfo['extension']; } } else { //Authenticate - if file? if(is_file($filepath)) { //Get extension using PHP's 'pathinfo' $pathinfo = pathinfo($filepath); //Count array into $len $len = count($afile); //Compare $pathinfo['extension'] with elements of array $afile for($i=0; $i<$len; $i++) { if($afile[$i] != $pathinfo['extension']) $stat = 'T'; else { $stat = 'F'; break; } } //If Status is true, then store into array if($stat == 'T') { $afile[$len] = $pathinfo['extension']; } } } } //Count total no. of different extensions. $extnum = count($afile); //Return no. of ext. return $extnum; //Close directory closedir($dp); } else { //Return no Value return 'Invalid Directory'; } } ?> The above function can be incorporated as you deem fit into a class situation to be accessed publicly. aggarwal_deep
The following souce is the combination of 3 different function ,does the listing of the whole files in directories or sub-directories of a base directory(given). And find out the maximum file size of given application files. for example it will tell the maximum file size of ppt file that is placed in the directory. <? function showExtension($file){ if(is_file($file)){ $fileInfo = pathinfo($file); $extension=$fileInfo["extension"]; } else { $extension=""; } return $extension; } function fsize($size) { $a = array("B", "KB", "MB", "GB", "TB", "PB"); $pos = 0; while ($size >= 1024) { $size /= 1024; $pos++; } return round($size,2)." ".$a[$pos]; } function ls ($curpath) { $dir = dir($curpath); $file_namearr = array("ETC","PPT","XLS","DOC","PDF"); echo("<b>$curpath</b>"); echo "<blockquote>"; $file_sizearr = array(1,1,1,1,1); while ($file = $dir->read()) { if($file != "." && $file != "..") { if (is_dir($curpath.$file)) { ls($curpath.$file."/"); } else { $filext= strtoupper(showExtension($curpath.$file)); $curr_key = 0; $curr_key = array_search($filext,$file_namearr); if($curr_key){ //echo " $filext:$curr_key"; $curr_file_size = $file_sizearr[$curr_key]; if(filesize($curpath.$file)>$curr_file_size){ $file_sizearr[$curr_key]= intval(filesize($curpath.$file)); } } //echo" $file : ".fsize($curpath.$file); } } }//while ends for($k=0;$k<5;$k++){ echo" ".$file_namearr[$k].":".fsize($file_sizearr[$k]); } $dir->close(); echo "</blockquote>"; return; } $startpath = "/home6/docmng/"; ls($startpath); ?> tim
Sorry, important typo in previous post: $dodgychars = "[^0-9a-zA-z()_-]"; should be (notice captial Z) $dodgychars = "[^0-9a-zA-Z()_-]"; mitra
Pollard@php.net contributed this in response to a question on setting these variables ... This option *IS* settable within your PHP scripts. Example: <?php ini_set('auto_detect_line_endings', true); $contents = file('unknowntype.txt'); ini_set('auto_detect_line_endings', false); $content2 = file('unixfile.txt'); ?> Note, with PHP 4.3 anytime Mac files are read using fgets or file you'll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to. \\ Read a line from a MAC file stream_get_line($fp, 4096, "\r"); \\ Read a line from a UNIX file stream_get_line($fp, 4096, "\n"); \\ Read a line from a DOS file stream_get_line($fp, 4096, "\r\n"); \\ Read a line up to any filesystem line ending ini_set('auto_detect_line_endings', true); fgets($fp); \\ You can also make up your own line ending characters: \\ Read up to the first instance of ":" stream_get_line($fp, 4096, ":"); hans
PHP5 Object File I couldn't find a File Object in PHP5, so I decided to create one myself. When a function that needs a path requires the file it will output a temp file and return the path to it, so that ie. parse_ini_file will work with the file object using: <?php parse_ini_file($myFile->requireFilePath()); ?> It is avaible for download at: http://www.lintoo.dk/public/dbase_and_file_class.zip Hans Duedal 16-aug-2006 07:11
Note that file functions automatically handle HTTP response codes, and in case of "Location" header you will get content of new reloacated page: <?php $url = "http://nu-imaging.com/catalog/"; // here we have redirect to /catalog/1/ $fp = fopen($fp); echo fread($fp, 1024); // we get content of /catalog/1/ fclose($fp); ?> tim
Little function to sanitize a user supplied file name, and optionally force a file extension: function sanitize_filename($filename, $forceextension="") { /* 1. Remove leading and trailing dots 2. Remove dodgy characters from filename, including spaces and dots except last. 3. Force extension if specified */ $defaultfilename = "none"; $dodgychars = "[^0-9a-zA-z()_-]"; // allow only alphanumeric, underscore, parentheses and hyphen $filename = preg_replace("/^[.]*/","",$filename); // lose any leading dots $filename = preg_replace("/[.]*$/","",$filename); // lose any trailing dots $filename = $filename?$filename:$defaultfilename; // if filename is blank, provide default $lastdotpos=strrpos($filename, "."); // save last dot position $filename = preg_replace("/$dodgychars/","_",$filename); // replace dodgy characters $afterdot = ""; if ($lastdotpos !== false) { // Split into name and extension, if any. $beforedot = substr($filename, 0, $lastdotpos); if ($lastdotpos < (strlen($filename) - 1)) $afterdot = substr($filename, $lastdotpos + 1); } else // no extension $beforedot = $filename; if ($forceextension) $filename = $beforedot . "." . $forceextension; elseif ($afterdot) $filename = $beforedot . "." . $afterdot; else $filename = $beforedot; return $filename; } echo sanitize_filename("..file<>@**()name.ddd.badextension", "extension")."\n"; echo sanitize_filename("..file<>@**()name.extension.ddd")."\n"; echo sanitize_filename("...", "extension")."\n"; echo sanitize_filename("...")."\n"; echo sanitize_filename("filename")."\n"; echo sanitize_filename("filename", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "")."\n"; produces file_____()name_ddd.extension file_____()name_extension.ddd none.extension none filename filename.extension xyz__.extension xyz__.xxx l_domenech
In the code samples of the user-contributed notes, you'll find functions that sometimes need a slash at the end of a folder path and sometimes don't. Here's a little function to append a slash at the end of a path if there isn't one already. function append_slash_if_none($string) { if (ereg ("/$", $string)) { return $string; } else { return ereg_replace("$", "/", $string); } } (Replace with a backslash if you're on Windows...) gregor mosheh
I needed a function to find disk usage for a directory and its subs, so here it is. It's kinda like the Unix du program, except it returns the usage in bytes, not blocks. function du($location) { if (!$location or !is_dir($location)) { return 0; } $total = 0; $all = opendir($location); while ($file = readdir($all)) { if (is_dir($location.'/'.$file) and $file <> ".." and $file <> ".") { $total += du($location.'/'.$file); unset($file); } elseif (!is_dir($location.'/'.$file)) { $stats = stat($location.'/'.$file); $total += $stats['size']; unset($file); } } closedir($all); unset($all); return $total; } print du('/some/directory'); tunnelareaten
I made this function to search and/or display files by extension or for a string occurance in the filename. Any comments or enhancements are welcome offcourse. I'll update this function soon. usage: list_files([string], [string], [int 1 | 0], [int 1 | 0]); search for extension: list_files([string], [string], [0], [int 1 | 0]); returns array: $myArray = list_files([string], [string], [0], [0]); echo result: list_files([string], [string], [0], [1]); search for string occurance: list_files([string], [string], [1], [int 1 | 0]); returns array: $myArray = list_files([string], [string], [1], [0]); echo result: list_files([string], [string], [1], [1]); <?php function list_files($directory, $stringSearch, $searchHandler, $outputHandler) { $errorHandler = false; $result = array(); if (! $directoryHandler = @opendir ($directory)) { echo ("<pre>\nerror: directory \"$directory\" doesn't exist!\n</pre>\n"); return $errorHandler = true; } if ($searchHandler === 0) { while (false !== ($fileName = @readdir ($directoryHandler))) { if(@substr ($fileName, - @strlen ($stringSearch)) === $stringSearch) { @array_push ($result, $fileName); } } } if ($searchHandler === 1) { while(false !== ($fileName = @readdir ($directoryHandler))) { if(@substr_count ($fileName, $stringSearch) > 0) { @array_push ($result, $fileName); } } } if (($errorHandler === true) && (@count ($result) === 0)) { echo ("<pre>\nerror: no filetype \"$fileExtension\" found!\n</pre>\n"); } else { sort ($result); if ($outputHandler === 0) { return $result; } if ($outputHandler === 1) { echo ("<pre>\n"); print_r ($result); echo ("</pre>\n"); } } } ?> christian
I just learned that, to specify file names in a portable manner, you DON'T need 'DIRECTORY_SEPARATOR' - just use '/'. This really surprised and shocked me, as until now I typed about a zillion times 'DIRECTORY_SEPARATOR' to stay platform independent - unnecessary. Don't make the same mistake.
shouri
Here's a little script I added to my set of web pages to insert a line saying when the set of web pages were last updated: <?php $latesttime = 0; if ($handle = opendir('/home/shouri/public_html')) { while (false !== ($file = readdir($handle))) { $recenttime = filemtime($file); if ($recenttime > $latesttime ) $latesttime = $recenttime; } closedir($handle); echo("Last updated on " . date("F d Y", $latesttime) . " at " . date("H:i", $latesttime) . " IST"); } ?> The html output looks like: Last updated on July 28 2007 at 20:19 IST wsuttonjr
Here's a little function I wrote that I thought someone might find useful. Ever notice those fancy breadcrumbed headings on Web sites such as Macromedia.com? Ever say, "I want one, but I don't want to write the HTML in each time?" Well, here you go. This does that based on your directory structure. Do note, however, that it only works if you use files and folders that are named like: /my-folder/my-file.php /my_folder/my_file.php /My_Folder/My_File.php /My-Folder/My-File.php ...and the variable <i>$path</i> must be similarly formatted. A preceding forward slash (/) must be on that <i>$path</i>. $_SERVER['PHP_SELF'], $_SERVER['DOCUMENT_ROOT'], and other $_SERVER variables always add that. When I have some free time (sooner rather than later), I'm going to write a more in-depth script for this. I just needed something simple for now. You can expect a PHP 4 and PHP 5 script class dedicated to this one idea. For now, this simple function does the trick. Anyway, here you go: <?php function breadCrumbs($path) { /** * What it does is split a path string into its two base objects -- a * file name and a directory name. * * After that, it then splits the directory into an array of sub- * directories and adds them to a stack of links with keys of 'name' * (directory name) and 'href' (hyperlink reference path). * * Each item in this indexed associative array is then stacked again * into an array of actual hyperlinks (i.e. <a href="Blah/Blah2.php">) * split by a tree notification ( > ) of sorts. * * Finally, the entire string, which may look like: * <a href="#">Services</a> > <a href="#">Web</a> * has the current file being viewed added to it. That finished string * is then returned to the calling script/function for display to the * browser. * * The returned HTML may look like: * <a href="#">Services</a> > <a href="#">Web</a> > Home */ // set the index file and name for each directory $dirIndex = 'Home.php'; $dirIndexName = 'Home'; // split $path into basename and dirname $file = basename($path, '.php'); $dir = dirname($path); // change all backslashes to forward slashes $dir = str_replace('\\', '/', $dir); // remove preceding forward slash (/) $dir = substr($dir, 1, strlen($dir)); // ** ADDED ** // add a trailing '/ ' to add a blank folder name - will be removed // NOTE: This is to ensure that an array IS created $dir .= '/ '; // split dirname into an array $dirs = preg_split('@\/@', $dir); // get the last array index from $dirs $lastIndex = count($dirs) - 1; // remove last $dirs if empty if ($dirs[$lastIndex] == '' || is_null($dirs[$lastIndex])) { unset($dirs[$lastIndex]); } // remove empty dir if ($dirs[$lastIndex] == ' ') { unset($dirs[$lastIndex]); } // get an accurate directory count $dirCount = count($dirs); // create $link and $links variables $link = '/'; $links = array(); // stack each directory into a link and dirname for ($i = 0; $i < count($dirs); $i++) { // change $dirs[$i] into capitalized word(s) and add spaces (for // grammatical correctness) $link .= ucwords(preg_replace('@(-|_)@', ' ', $dirs[$i])) . '/'; $links[$i]['href'] = $link . $dirIndex; $links[$i]['name'] = ucwords($dirs[$i]); } // instanciate $breadcrumbs array $breadcrumbs = array(); // stack $links into HTML-equivalent links for ($i = 0; $i < count($links); $i++) { $breadcrumbs[$i] = '<a href="' . $links[$i]['href'] . '">' . $links[$i]['name'] . '</a>'; } // see if links are needed or if a parent document if ($dirs[0] == '' || empty($dirs[0])) { // it is not so use just the file name $breadcrumb = $file; } else { // it is so compile the links into a breadcrumb string $breadcrumb = '<a href="/' . $dirIndex . '">' . $dirIndexName . '</a> — ' . join($breadcrumbs, ' > '); $breadcrumb .= ' > ' . $file; } // return compiled breadcrumb string return $breadcrumb; } ?> designatevoid
Here's a function that checks if a string filename, absolute or relative, is valid or not. <?php function validFilename($file) { if( checkCurrentOS( 'Win' )) { // if has invalid filename, return false if ( preg_match( '/PRN|CON|AUX|CLOCK\$|NUL|COM\d|LPT\d/i', $file)) { return false; } $parts = explode( "\\", $file); // if a drive letter, approve (don't check it later) if (preg_match( '/[A-Za-z]:/', $parts[0] )) { $parts[0] = null; } // checks for invalid printable charactors or control charactors foreach ($parts as $part) { if( preg_match( '|[\^\|\?\*<\":>/\a\b\e\f\n\r\t]|', $part )) { return false; } } return true; } else { // unix always passes return true; } } function checkCurrentOS($operatingSystem) { $currentOS = substr( php_uname(), 0, 7 ) == "Windows" ? "Win" : "_Nix"; if ( strcmp( $operatingSystem, $currentOS ) == 0 ) { return true; } else { return false; } } ?> meheler
Here is a useful function that checks for the existance of a file in PHP's include_path: // Searches PHP's include_path variable for the existance of a file // Returns the filename if it's found, otherwise FALSE. // Only works on a *nix-based filesystem // Check like: if (($file = file_exists_path('PEAR.php')) !== FALSE) function file_exists_path($file) { // Absolute path specified if (substr($path,0,1)=='/') return (file_exists($file))?realpath($file):FALSE; $paths = explode(':',ini_get('include_path')); foreach ($paths as $path) { if (substr($path,-1)!='/') $path = "$path/"; if (file_exists("$path$file")) return realpath("$path$file"); } return FALSE; } Mike regis
Here is a useful function if you're having trouble writing raw bytes into a file. It receives an integer and returns an array containing the ASCII values of the bytes on each index of the array. function int2bytes($number){ $byte = $number; $i=0; do{ $dec_tmp = $byte; $byte = bcdiv($byte,256,0); $resto = $dec_tmp - (256 * $byte); $return[] = $resto; } while($byte >= 256); if($byte) $return[] = $byte; return array_reverse($return); } Example: $arr = int2bytes(75832); $arr will contain the following values: Array ( [0] => 1 [1] => 40 [2] => 56 ) Now, to write this data to the file, just use a fputs() with chr(), just like this: fputs($fp,chr($arr[0]).chr($arr[1]).chr($arr[2])) -- Regis ciprian danea, cipriandanea
Here is a little script that will enumerate a directory (given as a string) recursively. The main working function is get_dir($path,$max_depth='') Optional aguments: $max_depth : obvious it'll limit the recursive depth. Not so optional: $l=0 : the first call must omit this, or explicitly set it to 0, since it represents the starting depth $total='': the current total filesize; it should also be left alone, although it autosets itself to 0 on the first call; In order to do something with the files other than just echoing them, simply replace the echo functions with your own; Thanks to: dave at birko dot cjb dot net (for the nice filesize function) vbwebprofi at gmx dot de (for the fileperms function) function get_dir($path,$max_depth='',$l=0,$total=''){ if(!is_dir($path))return; $path=substr($path,-1)!="/"?$path."/":$path; if(!$l){ echo "\nEnumerating directory $path :\n\n"; $total=0; } if($max_depth==='' || ($max_depth>$l && is_int($max_depth))) $test_depth=true; else $test_depth=false; $pre=""; $c=$l; while($c--)$pre.="\t"; $dir=opendir($path); while($f=readdir($dir)){ if($f=="."||$f=="..")continue; $file=$path.$f; $size=""; if(is_file($file)||!is_dir($file)){ $s=filesize($file); $total+=$s; $size="[ ".fsize($s)." ]"; } else $f.="/"; while(strlen($size)<16) $size=" ".$size; echo "\n".get_permissions(fileperms($file)).$size.$pre."\t".$f; if(is_dir($file) && $test_depth) $total=get_dir($file,$max_depth,$l+1,$total); } if(!$l) echo "\n\nTotal size: ".fsize($total); return $total; } function get_permissions($fperms) { $out; if($fperms & 0x1000) // FIFO pipe $out = 'p'; elseif($fperms & 0x2000) // Character outecial $out = 'c'; elseif($fperms & 0x3000) // Socket [ original value 0xD000, wrong for linux, but this is also registering as a directory... ant ideas?] $out = 's'; elseif($fperms & 0x4000) // Directory $out = 'd'; elseif($fperms & 0x6000) // Block outecial $out = 'b'; elseif($fperms & 0x8000) // Regular $out = '-'; elseif($fperms & 0xA000) // Symbolic Link $out = 'l'; else // UNKNOWN $out = 'u'; // owner $out .= (($fperms & 0x0100) ? 'r' : '-') . (($fperms & 0x0080) ? 'w' : '-') . (($fperms & 0x0040) ? (($fperms & 0x0800) ? 's' : 'x' ) : (($fperms & 0x0800) ? 'S' : '-')); // group $out .= (($fperms & 0x0020) ? 'r' : '-') . (($fperms & 0x0010) ? 'w' : '-') . (($fperms & 0x0008) ? (($fperms & 0x0400) ? 's' : 'x' ) : (($fperms & 0x0400) ? 'S' : '-')); // world $out .= (($fperms & 0x0004) ? 'r' : '-') . (($fperms & 0x0002) ? 'w' : '-') . (($fperms & 0x0001) ? (($fperms & 0x0200) ? 't' : 'x' ) : (($fperms & 0x0200) ? 'T' : '-')); return $out; } function fsize($size) { $a = array("B", "KB", "MB", "GB", "TB", "PB"); $pos = 0; while ($size >= 1024) { $size /= 1024; $pos++; } return round($size,2)." ".$a[$pos]; } //usage example get_dir("/tmp/"); // full depth get_dir("/tmp/",4); //maximum depth set to 4 peeweek
here is a function that recurses all directories in a Windows Tree then displays for each directory its contents. function ls ($curpath) { $dir = dir($curpath); echo("<b>$curpath</b>"); echo "<blockquote>"; while ($file = $dir->read()) { if($file != "." && $file != "..") { if (is_dir($curpath.$file)) { ls($curpath.$file."\\"); } else { echo("$file "); } } } $dir->close(); echo "</blockquote>"; return; } Use: $startpath = "D:\\something\\"; ls($startpath); http://iubito.free.fr
Here is a function I wrote to get the relative path between 2 files or directory. We suppose that paths are wrotten in Unix format (/ instead of windows \\) <?php /** * Return the relative path between two paths / Retourne le chemin relatif entre 2 chemins * * If $path2 is empty, get the current directory (getcwd). * @return string */ function relativePath($path1, $path2='') { if ($path2 == '') { $path2 = $path1; $path1 = getcwd(); } //Remove starting, ending, and double / in paths $path1 = trim($path1,'/'); $path2 = trim($path2,'/'); while (substr_count($path1, '//')) $path1 = str_replace('//', '/', $path1); while (substr_count($path2, '//')) $path2 = str_replace('//', '/', $path2); //create arrays $arr1 = explode('/', $path1); if ($arr1 == array('')) $arr1 = array(); $arr2 = explode('/', $path2); if ($arr2 == array('')) $arr2 = array(); $size1 = count($arr1); $size2 = count($arr2); //now the hard part :-p $path=''; for($i=0; $i<min($size1,$size2); $i++) { if ($arr1[$i] == $arr2[$i]) continue; else $path = '../'.$path.$arr2[$i].'/'; } if ($size1 > $size2) for ($i = $size2; $i < $size1; $i++) $path = '../'.$path; else if ($size2 > $size1) for ($i = $size1; $i < $size2; $i++) $path .= $arr2[$i].'/'; return $path; } ?> Enjoy ! :-) ben
Directed at: fankounter at libero dot it Erm, I think you missed glob() which does what you're doing, only much more efficiently. see: http://php.net/glob php_net
Correction to previous posts's code (had $fp instead of $url on second line) <?php $url = "http://nu-imaging.com/catalog/"; // here we have redirect to /catalog/1/ $fp = fopen($url); echo fread($fp, 1024); // we get content of /catalog/1/ fclose($fp); ?> 28-may-2005 08:17
Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.) Again, please note, if you ask a question, report a bug, or request a feature, your note will be deleted.)
m2pc
After searching all over the place to find a function to do what I wanted, I wrote the following: /* ** Returns an array of valid drives on the system (a:, b:, etc.) */ function getSystemDrives () { // Initialize $aResult = Array (); // Loop from A-Z and try opening the root dir for ($letter = 'A'; $letter <= 'Z'; $letter ++) { if (is_dir ($letter . ":")) $aResult [] = $letter . ":"; } // Return results return ($aResult); } It simply returns an array of valid drives as seen from the server (A:, B:, etc.). This obviously is targeted to Win32 installations only. fankounter
// ls(dir,pattern) return file list in "dir" folder matching "pattern" // ls("path","module.php?") search into "path" folder for module.php3, module.php4, ... // ls("images/","*.jpg") search into "images" folder for JPG images function ls($__dir="./",$__pattern="*.*") { settype($__dir,"string"); settype($__pattern,"string"); $__ls=array(); $__regexp=preg_quote($__pattern,"/"); $__regexp=preg_replace("/[\\x5C][\x2A]/",".*",$__regexp); $__regexp=preg_replace("/[\\x5C][\x3F]/",".", $__regexp); if(is_dir($__dir)) if(($__dir_h=@opendir($__dir))!==FALSE) { while(($__file=readdir($__dir_h))!==FALSE) if(preg_match("/^".$__regexp."$/",$__file)) array_push($__ls,$__file); closedir($__dir_h); sort($__ls,SORT_STRING); } return $__ls; } hello
<?php // faster "fcountext" function function extCount ($dir) { if (is_dir ($dir)) { $g = glob ($dir . '/*.*'); foreach ($g as $v) { $this = pathinfo($v); $e[] = $this['extension']; } // return extension count return count(array_unique($e)); // alternately, you could return an array of the extensions found - return array_values(array_unique($e)); } // otherwise return false; } ?> |
Change Language.NET Functions Apache-specific Functions Alternative PHP Cache Advanced PHP debugger Array Functions Aspell functions [deprecated] BBCode Functions BCMath Arbitrary Precision Mathematics Functions PHP bytecode Compiler Bzip2 Compression Functions Calendar Functions CCVS API Functions [deprecated] Class/Object Functions Classkit Functions ClibPDF Functions [deprecated] COM and .Net (Windows) Crack Functions Character Type Functions CURL Cybercash Payment Functions Credit Mutuel CyberMUT functions Cyrus IMAP administration Functions Date and Time Functions DB++ Functions Database (dbm-style) Abstraction Layer Functions dBase Functions DBM Functions [deprecated] dbx Functions Direct IO Functions Directory Functions DOM Functions DOM XML Functions enchant Functions Error Handling and Logging Functions Exif Functions Expect Functions File Alteration Monitor Functions Forms Data Format Functions Fileinfo Functions filePro Functions Filesystem Functions Filter Functions Firebird/InterBase Functions Firebird/Interbase Functions (PDO_FIREBIRD) FriBiDi Functions FrontBase Functions FTP Functions Function Handling Functions GeoIP Functions Gettext Functions GMP Functions gnupg Functions Net_Gopher Haru PDF Functions hash Functions HTTP Hyperwave Functions Hyperwave API Functions i18n Functions IBM Functions (PDO_IBM) IBM DB2 iconv Functions ID3 Functions IIS Administration Functions Image Functions Imagick Image Library IMAP Informix Functions Informix Functions (PDO_INFORMIX) Ingres II Functions IRC Gateway Functions PHP / Java Integration JSON Functions KADM5 LDAP Functions libxml Functions Lotus Notes Functions LZF Functions Mail Functions Mailparse Functions Mathematical Functions MaxDB PHP Extension MCAL Functions Mcrypt Encryption Functions MCVE (Monetra) Payment Functions Memcache Functions Mhash Functions Mimetype Functions Ming functions for Flash Miscellaneous Functions mnoGoSearch Functions Microsoft SQL Server Functions Microsoft SQL Server and Sybase Functions (PDO_DBLIB) Mohawk Software Session Handler Functions mSQL Functions Multibyte String Functions muscat Functions MySQL Functions MySQL Functions (PDO_MYSQL) MySQL Improved Extension Ncurses Terminal Screen Control Functions Network Functions Newt Functions NSAPI-specific Functions Object Aggregation/Composition Functions Object property and method call overloading Oracle Functions ODBC Functions (Unified) ODBC and DB2 Functions (PDO_ODBC) oggvorbis OpenAL Audio Bindings OpenSSL Functions Oracle Functions [deprecated] Oracle Functions (PDO_OCI) Output Control Functions Ovrimos SQL Functions Paradox File Access Parsekit Functions Process Control Functions Regular Expression Functions (Perl-Compatible) PDF Functions PDO Functions Phar archive stream and classes PHP Options&Information POSIX Functions Regular Expression Functions (POSIX Extended) PostgreSQL Functions PostgreSQL Functions (PDO_PGSQL) Printer Functions Program Execution Functions PostScript document creation Pspell Functions qtdom Functions Radius Rar Functions GNU Readline GNU Recode Functions RPM Header Reading Functions runkit Functions SAM - Simple Asynchronous Messaging Satellite CORBA client extension [deprecated] SCA Functions SDO Functions SDO XML Data Access Service Functions SDO Relational Data Access Service Functions Semaphore SESAM Database Functions PostgreSQL Session Save Handler Session Handling Functions Shared Memory Functions SimpleXML functions SNMP Functions SOAP Functions Socket Functions Standard PHP Library (SPL) Functions SQLite Functions SQLite Functions (PDO_SQLITE) Secure Shell2 Functions Statistics Functions Stream Functions String Functions Subversion Functions Shockwave Flash Functions Swish Functions Sybase Functions TCP Wrappers Functions Tidy Functions Tokenizer Functions Unicode Functions URL Functions Variable Handling Functions Verisign Payflow Pro Functions vpopmail Functions W32api Functions WDDX Functions win32ps Functions win32service Functions xattr Functions xdiff Functions XML Parser Functions XML-RPC Functions XMLReader functions XMLWriter Functions XSL functions XSLT Functions YAZ Functions YP/NIS Functions Zip File Functions Zlib Compression Functions |