ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Facebook
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 110
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Uważam, że serwis jest najlepszy na świecie. Wykonany rzetelnie, a wszystkie skrypty sa dopracowane. Zamieszczony materiał godny mistrza. Jestem programistą od wielu lat i bez tego serwisu nie istnieje. Upraszacza życie każdemu programiście. Imponujący jest fakt, że do twórcy serwisu zawsze można się zwrócić z prośbą o pomoc i uzyskuje się ją w bardzo krótkim czasie. Najważniejsze w tym wszystkim jest to, że można korzystać z witryny za symboliczną opłatą.

Marcin Kowalski
Multinet Polska

   
GALERIA FOTOGRAFII
   
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]

XXXVII. System plików

Wymagania

Żadne zewnętrzne biblioteki nie są potrzebne do zbudowania tego rozszeżenia, jeśli jednak potrzebujesz PHP z obsługą LFS (dużych plików) na Linuksie, musisz mieć nowy glibc i skompilować PHP z następującą flagą kompilatora: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.

Instalacja

By używać tych funkcji, nie trzeba niczego instalować. Są one częścią jądra PHP.

Konfiguracja czasu wykonywania

Na działanie tych funcji wpływają ustawienia zawarte w pliku php.ini.

Tabela 1. Filesystem and Streams Configuration Options

NameDefaultChangeableChangelog
allow_url_fopen"1"PHP_INI_SYSTEMPHP_INI_ALL in PHP <= 4.3.4. Available since PHP 4.0.4.
user_agentNULLPHP_INI_ALLAvailable since PHP 4.3.0.
default_socket_timeout"60"PHP_INI_ALLAvailable since PHP 4.3.0.
fromNULL?? 
auto_detect_line_endings"0"PHP_INI_ALLAvailable since PHP 4.3.0.

Oto krótkie wyjaśnienie dyrektyw konfiguracji.

allow_url_fopen boolean

This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers.

Notatka: This setting can only be set in php.ini due to security reasons.

Notatka: This option was introduced immediately after the release of version 4.0.3. For versions up to and including 4.0.3 you can only disable this feature at compile time by using the configuration switch --disable-url-fopen-wrapper.

Ostrzeżenie

On Windows versions prior to PHP 4.3.0, the following functions do not support remote file accessing: include(), include_once(), require(), require_once() and the imagecreatefromXXX functions in the Materiały źródłowe LII, Image Functions extension.

user_agent string

Define the user agent for PHP to send.

default_socket_timeout integer

Default timeout (in seconds) for socket based streams.

Notatka: This configuration option was introduced in PHP 4.3.0

from string

Define the anonymous ftp password (your email address).

auto_detect_line_endings boolean

When turned on, PHP will examine the data read by fgets() and file() to see if it is using Unix, MS-Dos or Macintosh line-ending conventions.

This enables PHP to interoperate with Macintosh systems, but defaults to Off, as there is a very small performance penalty when detecting the EOL conventions for the first line, and also because people using carriage-returns as item separators under Unix systems would experience non-backwards-compatible behaviour.

Notatka: This configuration option was introduced in PHP 4.3.0

Stałe predefinopwane

Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.

GLOB_BRACE (integer)

GLOB_ONLYDIR (integer)

GLOB_MARK (integer)

GLOB_NOSORT (integer)

GLOB_NOCHECK (integer)

GLOB_NOESCAPE (integer)

PATHINFO_DIRNAME (integer)

PATHINFO_BASENAME (integer)

PATHINFO_EXTENSION (integer)

FILE_USE_INCLUDE_PATH (integer)

FILE_APPEND (integer)

FILE_IGNORE_NEW_LINES (integer)

FILE_SKIP_EMPTY_LINES (integer)

Patrz także

Związane z tym działem funkcje, znajdziesz w rozdziale Katalog i Wykonywanie programów.

Listę wraz z opisem różnych wrapperów URL, które mogą zostać użyte jako zdalne pliki, znajdziesz tu Dodatek L.

Spis treści
basename -- Zwraca nazwę pliku, będącego składową ścieżki
chgrp -- Zmienia grupę pliku
chmod -- Zmienia prawa dostępu do pliku
chown -- Zmienia właściciela pliku
clearstatcache -- Czyści bufor statusu pliku
copy -- Kopiuje plik
delete -- Zobacz unlink() lub unset()
dirname -- Zwraca nazwę katalogu, będącego składową ścieżki
disk_free_space -- Zwraca ilość wolnego miejsca w katalogu
disk_total_space -- Zwraca całkowity rozmiar katalogu
diskfreespace -- Alias do disk_free_space()
fclose -- Zamyka otwarty wskaźnik pliku
feof -- Sprawdza czy wskaźnik pliku jest na końcu pliku (EOF)
fflush -- Przekierowuje wyjście do pliku
fgetc -- Pobiera znak ze wskaźnika pliku
fgetcsv -- Pobiera linię ze wskanika pliku i przetwarza na pola CSV
fgets -- Pobiera linię ze wskaźnika pliku
fgetss -- Pobiera linię ze wskaźnika pliku i usuwa tagi HTML
file_exists -- Sprawdza czy plik lub katalog istnieje
file_get_contents -- Reads entire file into a string
file_put_contents -- Write a string to a file
file -- Czyta całą zawartość pliku do tablicy
fileatime -- Pobiera ostatni czas dostępu do pliku
filectime -- Pobiera i-węzłowy czas zmiany pliku
filegroup -- Pobiera grupę pliku
fileinode -- Pobiera i-węzeł pliku
filemtime -- Pobiera czas ostatniej modyfikacji pliku
fileowner -- Pobiera właściciela pliku
fileperms -- Pobiera prawa dostępu pliku
filesize -- Pobiera rozmiar pliku
filetype -- Pobiera typ pliku
flock -- Portable advisory file locking
fnmatch -- Match filename against a pattern
fopen -- Otwiera plik lub URL
fpassthru -- Output all remaining data on a file pointer
fputcsv --  Format line as CSV and write to file pointer
fputs -- Alias funkcji fwrite()
fread -- Odczyt pliku binarnie bezpieczy
fscanf -- Przetwarza dane z pliku według formatu
fseek -- Seeks on a file pointer
fstat -- Pobiera informacje o pliku używając otwartego wskaźnika pliku
ftell -- Mówi o pozycji odczyt/zapis wskaźnika pliku
ftruncate -- Przycina plik do podanej długości
fwrite -- Zapis pliku binarnie bezpieczny
glob -- Find pathnames matching a pattern
is_dir -- Mówi czy nazwa_pliku jest katalogiem
is_executable -- Mówi czy plik jest wykonywalny
is_file -- Mówi czy nazwa_pliku jest zwykłym plikiem
is_link -- Mówi czy nazwa_pliku jest dowiązaniem symbolicznym
is_readable -- Tells whether the filename is readable
is_uploaded_file -- Mówi czy plik został przysłany przez HTTP POST.
is_writable -- Tells whether the filename is writable
is_writeable -- Alias do is_writable()
link -- Tworzy dowiązanie twarde
linkinfo -- Pobiera informacje o linku
lstat -- Podaje informacje o pliku lub dowiązaniu symbolicznym
mkdir -- Tworzy katalog
move_uploaded_file -- Przenieś uploadowany plik do innej lokalizacji
parse_ini_file -- Parse a configuration file
pathinfo -- Returns information about a file path
pclose -- Closes process file pointer
popen -- Otwiera wskaźnik pliku do procesu
readfile -- Wyświetla plik
readlink -- Zwraca cel linku symbolicznego
realpath -- Returns canonicalized absolute pathname
rename -- Renames a file or directory
rewind -- Rewind the position of a file pointer
rmdir -- Removes directory
set_file_buffer -- Alias of stream_set_write_buffer()
stat -- Gives information about a file
symlink -- Creates a symbolic link
tempnam -- Create file with unique file name
tmpfile -- Tworzy plik tymczasowy
touch -- Ustawia czas modyfikacji pliku
umask -- Changes the current umask
unlink -- Kasowanie pliku



User Contributed Notes

wsuttonjr at hyponiqs dot com
15-Oct-2005 09:26

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> &#8212; ' . join($breadcrumbs, ' > ');
      
$breadcrumb .= ' > ' . $file;
   }
  
  
// return compiled breadcrumb string
  
return $breadcrumb;
}
?>


Ciprian Danea, cipriandanea at yahoo dot com
28-Jul-2005 04:28

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


28-May-2005 09: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.)


hans at lintoo dot dk
23-Mar-2005 05:41

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


tunnelareaten at gmail dot com
25-Feb-2005 05:27

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");
  }
 }
}

?>


ben at nullcreations dot net
14-Nov-2004 11:29

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


fankounter at libero dot it
05-Nov-2004 03:31

// 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;
}


m2pc (at) hotmail.com
07-Oct-2004 06:18

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.


Storm Reaver
13-Apr-2004 04:48

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 at xzone9 dot com
16-Mar-2004 09:46

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<br>");
             }
       }
   }
   $dir->close();
   echo "</blockquote>";
   return;
}

//Use:

$startpath = "/home/mypath/";
ls($startpath);


http://iubito.free.fr
30-Dec-2003 01:39

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 ! :-)


Gregor Mosheh
23-Aug-2003 02:23

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)$/');


Gregor Mosheh
17-Jul-2003 07:25

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');


aggarwal_deep at hotmail dot com
16-Jul-2003 11:43

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 "<br>$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"<br> $file : ".fsize($curpath.$file);
              
}
           }
          
       }
//while ends
      
for($k=0;$k<5;$k++){
           echo
"<br>".$file_namearr[$k].":".fsize($file_sizearr[$k]); 
       }
      
$dir->close();
       echo
"</blockquote>";
       return;
   }
 
$startpath = "/home6/docmng/";
ls($startpath);
 
 
?>


l_domenech at yahoo dot ca
03-Jul-2003 07:25

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...)


mitra at mitra dot biz
16-May-2003 07:10

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, ":");


peeweek at altern dot org
09-May-2003 02:06

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<br>");
             }
       }
   }
   $dir->close();
   echo "</blockquote>";
   return;
}

Use:

$startpath = "D:\\something\\";
ls($startpath);


regis at webstuff dot com dot br
03-Apr-2003 05:49

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


jdhurn at uberidx dot com
08-Mar-2003 04:18

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);
}


meheler at canada dot com
07-Mar-2002 08:55

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


 

 
  © 1996-2010 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt