downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

basename> <filepro
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XL. Funktionen des Dateisystems

Einführung

Anforderungen

Diese Erweiterung benötigt keine externen Bibliotheken.

Installation

Für diese Funktionen ist keine Installation erforderlich, diese gehören zum Grundbestand von PHP.

Laufzeit Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Tabelle 83. Dateisystem und Streams Konfigurationsoptionen

NameStandardwertÄnderbar
allow_url_fopen"1"PHP_INI_ALL
user_agentNULLPHP_INI_ALL
default_socket_timeout"60"PHP_INI_ALL
fromNULL??
auto_detect_line_endings"Off"PHP_INI_ALL

Hier eine kurze Erklärung der Konfigurationsoptionen:

allow_url_fopen boolean

Diese Option aktiviert den URL-aware fopen wrappern, welche den Zugriff auf URL Objekt ähnliche Dateien ermöglicht. Standardmäßig stehen Wrapper für den Zugriff auf entfernte Dateien über das FTP oder HTTP Protokoll zur Verfügung, manche Erweiterungen wie zlib können über weitere Wrapper verfügen.

Anmerkung: Die Option wurde unmittelbar nach der Freigabe von PHP 4.0.3 eingeführt. In den Versionen bis zu inklusive 4.0.3 können Sie diese Eigenschaft nur während des Kompilierens mittels der Konfigurationsoption --disable-url-fopen-wrapper deaktivieren.

Warnung
In den Windowsversionen vor PHP 4.3.0 unterstützen die folgenden Funktionen den Zugriff auf entfernte Dateien nicht: include(), include_once(), require(), require_once(), sowie die imagecreatefromXXX Funktionen in der Grafiken Erweiterung.

user_agent string

Definiert den User Agent, den PHP senden soll.

default_socket_timeout integer

Standardtimeout (in Sekunden) für Socket basierte Streams.

Anmerkung: Diese Konfigurationsoption wurde in PHP 4.3.0 eingeführt.

from="joe@example.com" string

Definiert das anonyme FTP Passwort (Ihre E-Mail Adresse).

auto_detect_line_endings boolean

Wenn aktiviert, prüft PHP die mittels fgets() und file() gelesenen Daten auf die Verwendung der Konventionen für Zeilenenden von Unix, MS-Dos oder Macintosh.

Dies ermöglich PHP die Kompatibilität mit Macintosh Systemen, ist jedoch standardmäßig deaktiviert, da die Ermittlung der EOL Konventionen der ersten Zeile einen kleinen Performanceverlust bedeutet. Weiters verwenden einige Leute Carriage-Returns als Trennzeichen für Elemente, was auf Unix Systemen ein nicht rückwärtskompatibles Verhalten bedeuten würde.

Anmerkung: Diese Konfigurationsoption wurde in PHP 4.3.0 eingeführt.

Resource Typen

Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

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)
PATHINFO_FILENAME (integer)
Since PHP 5.2.0.
FILE_USE_INCLUDE_PATH (integer)
FILE_APPEND (integer)
FILE_IGNORE_NEW_LINES (integer)
FILE_SKIP_EMPTY_LINES (integer)

Siehe auch

Verwandte Funktionen finden Sie in den Abschnitten Verzeichnis-Funktionen und Funktionen zur Programmausführung.

Eine Liste mit Erklärungen der verschiedenen URL Wrapper, welche Sie auch als entfernte Dateien nutzen können, finden Sie unter Anhang M, List of Supported Protocols/Wrappers.

Inhaltsverzeichnis

basename — Extrahiert den Namen einer Datei aus einer vollständigen Pfadangabe
chgrp — Wechselt die Gruppenzugehörigkeit einer Datei
chmod — Ändert die Zugriffsrechte einer Datei
chown — Ändert den Eigentümer einer Datei
clearstatcache — Löscht den Status Cache
copy — Kopiert eine Datei
delete — Siehe unlink() oder unset()
dirname — Extrahiert den Verzeichnis-Namen aus einer vollständigen Pfadangabe
disk_free_space — Liefert den freien Speicherplatz in einem Verzeichnis
disk_total_space — Liefert die Gesamtgröße eines Verzeichnisses
diskfreespace — Ist ein Alias für disk_free_space()
fclose — Schließt einen offenen Dateizeiger
feof — Prüft, ob der Dateizeiger am Ende der Datei steht
fflush — Schreibt den Ausgabepuffer in eine Datei
fgetc — Liest das Zeichen, auf welches der Dateizeiger zeigt
fgetcsv — Liest eine Zeile von der Position des Dateizeigers und prüft diese auf Komma-Separierte-Werte (CSV)
fgets — Liest eine Zeile von der Position des Dateizeigers
fgetss — Liest eine Zeile von der Position des Dateizeigers und entfernt HTML Tags.
file_exists — Prüft, ob eine Datei oder ein Verzeichnis existiert
file_get_contents — Liest die gesamte Datei in einen String
file_put_contents — Write a string to a file
file — Liest eine Datei komplett in ein Array
fileatime — Liefert Datum und Uhrzeit des letzten Zugriffs auf eine Datei
filectime — Liefert Datum und Uhrzeit der letzten Änderung des Dateizeigers Inode
filegroup — Liefert die Gruppenzugehörigkeit einer Datei
fileinode — Liefert die Inode-Nummer einer Datei
filemtime — Liefert Datum und Uhrzeit der letzten Dateiänderung
fileowner — Liefert den Dateieigentümer
fileperms — Liefert die Zugriffsrechte einer Datei
filesize — Liefert die Größe einer Datei
filetype — Liefert den Typ einer Datei
flock — Portables Datei-Verriegelungs-Verfahren
fnmatch — Match filename against a pattern
fopen — Öffnet eine Datei oder URL
fpassthru — Gibt alle verbleibenden Daten eines Dateizeigers direkt aus.
fputcsv — Format line as CSV and write to file pointer
fputs — Schreibt Daten an die Position des Dateizeigers
fread — Liest Binärdaten aus einer Datei
fscanf — Interpretiert den Input einer Datei entsprechend einem angegebenen Format
fseek — Positioniert den Dateizeiger
fstat — Liefert Informationen über eine Datei mit offenem Dateizeiger
ftell — Ermittelt die aktuelle Position des Dateizeigers
ftruncate — Kürzt eine Datei auf die angegebene Länge
fwrite — Schreibt Binärdaten in eine Datei
glob — Find pathnames matching a pattern
is_dir — Prüft, ob der gegebene Dateiname ein Verzeichnis ist
is_executable — Prüft, ob eine Datei ausführbar ist
is_file — Prüft, ob der Dateiname eine reguläre Datei ist
is_link — Prüft, ob der Dateiname ein symbolischer Link ist
is_readable — Prüft, ob eine Datei lesbar ist
is_uploaded_file — Prüft, ob die Datei mittels HTTP POST upgeloaded wurde
is_writable — Prüft, ob in eine Datei geschrieben werden kann
is_writeable — Prüft, ob in eine Datei geschrieben werden kann
lchgrp — Changes group ownership of symlink
lchown — Changes user ownership of symlink
link — Erzeugt einen absoluten Link
linkinfo — Liefert Informationen über einen Link
lstat — Liefert Informationen über eine Datei oder einen symbolischen Link.
mkdir — Erstellt ein Verzeichnis
move_uploaded_file — Verschiebt eine upgeloadete Datei an einen neuen Ort
parse_ini_file — Analysiert eine Konfigurationsdatei
pathinfo — Liefert Informationen über den Dateipfad
pclose — Schließt einen Prozess-Dateizeiger
popen — Öffnet einen Prozesszeiger
readfile — Gibt eine Datei aus
readlink — Liefert das Ziel eines symbolischen Links
realpath — Erzeugt einen kanonisch absoluten Pfadnamen
rename — Benennt eine Datei oder ein Verzeichnis um
rewind — Setzt den Dateizeiger auf das erste Byte der Datei
rmdir — Löscht ein Verzeichnis
set_file_buffer — Alias von stream_set_write_buffer()
stat — Liefert diverse Informationen über eine Datei
symlink — Erzeugt einen symbolischen Link
tempnam — Erzeugt eine Datei mit eindeutigem Dateinamen
tmpfile — Legt eine temporäre Datei an
touch — Setzt die Zugriffs- und Modifizierungszeit einer Datei
umask — Ändert die aktuelle umask (Zugriffsrechte)
unlink — Löscht eine Datei


basename> <filepro
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Funktionen des Dateisystems
drapeko.com 23-May-2009 06:19
You have an array of directories (straightforward list of directories):

<?php
     $array
= array(
        
'/home/drapeko/var',
        
'/home/drapeko/var/y',
        
'/home/drapeko',
        
'/home',
        
'/var/libexec'
    
);
     );
?>

And you would like to transform this array to hierarchy of directories:

<?php
 $array
= array (
    
'home' => array (
        
'drapeko' => array (
            
'var' => array (
                
'y' => array()
             )
         )
     ),
    
'var' => array(
        
'libexec' => array()
     )
 );
?>

How can you do it?

First of all the below function will help us.

<?php
/**
 * This function converts real filesystem path to the string array representation.
 *
 * for example,
 * '/home/drapeko/var/y            will be converted to    $result_array['home']['drapeko']['var']['y']
 * '/home/drapeko/var/y/file.txt   will be converted to       $result_array['home']['drapeko']['var']['y']
 *
 * @param $path         realpath of the directory
 * @return string        string array representation of the path
 */
function pathToArrayStr($path) {
    
// TODO constants/configs?
    
$res_path = str_replace(array(':/', ':\\', '/', '\\', DIRECTORY_SEPARATOR), '/', $path);
    
// if the first or last symbol is '/' delete it (e.g. for linux)
    
$res_path = preg_replace(array("/^\//", "/\/$/"), '', $res_path);
    
// create string
    
$res_path = '[\''.str_replace('/', '\'][\'', $res_path).'\']';

     return
$res_path;
}
?>

It simply converts the real path of the file to array string representation.

How can you use this function? I know it looks like a little confusing. But it's quite simple. Consider the example below:

<?php
 $result
= array();
 
$check = array();
 foreach(
$array as $val) {
    
$str = pathToArrayStr($val, 'result');
     foreach(
$check as $ck) {
         if (
strpos($ck, $str) !== false) {
             continue
2;
         }
     }
    
$check[] = $str;
     eval(
'$result'.$str.' = array();');
 }
print_r($result);
?>

Heh, how do you find it? This approach has helped me very much. I hope you will find it useful. :)
Christian 17-Mar-2007 09:24
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.
tunnelareaten at gmail dot com 25-Feb-2005 08: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");
  }
 }
}

?>
http://iubito.free.fr 30-Dec-2003 04: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 22-Aug-2003 05: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 16-Jul-2003 10: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');
l_domenech at yahoo dot ca 03-Jul-2003 10: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 15-May-2003 10: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, ":");
regis at webstuff dot com dot br 03-Apr-2003 07: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 07: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);
}

 
show source | credits | sitemap | contact | advertising | mirror sites