Dateisystem-Funktionen

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 Unterstützte Protokolle und Wrapper.

Inhaltsverzeichnis

  • basename — Liefert den letzten Namensteil einer Pfadangabe
  • chgrp — Ändert die Gruppenzugehörigkeit einer Datei
  • chmod — Ändert den Modus für 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 — Liefert den Pfad des übergeordneten Verzeichnisses
  • disk_free_space — Liefert den verfügbaren Platz auf einem Dateisystem oder einer Partition
  • disk_total_space — Liefert die Gesamtgröße eines Dateisystemes oder einer Partition
  • diskfreespace — Alias von disk_free_space
  • fclose — Schließt einen offenen Dateizeiger
  • fdatasync — Synchronizes data (but not meta-data) to the file
  • feof — Prüft, ob ein 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 kommaseparierte Werte (CSV)
  • fgets — Liest die 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 — Schreibt Daten in eine Datei
  • file — Liest eine komplette Datei in ein Array
  • fileatime — Liefert die Zeit des letzten Zugriffs auf eine Datei
  • filectime — Liefert die Änderungszeit eines Datei-Inodes
  • filegroup — Liefert die Gruppenzugehörigkeit einer Datei
  • fileinode — Liefert die Inode-Nummer einer Datei
  • filemtime — Liefert die Zeit der letzten Dateiänderung
  • fileowner — Liefert den Eigentümer einer Datei
  • fileperms — Liefert die Zugriffsrechte einer Datei
  • filesize — Liefert die Größe einer Datei
  • filetype — Liefert den Typ einer Datei
  • flock — Portables Datei-Sperrverfahren (advisory locking)
  • fnmatch — Match filename against a pattern
  • fopen — Öffnet eine Datei oder URL
  • fpassthru — Gibt alle verbleibenden Daten eines Dateizeigers aus
  • fputcsv — Format line as CSV and write to file pointer
  • fputs — Alias von fwrite
  • fread — Liest Binärdaten aus einer Datei
  • fscanf — Interpretiert den Input einer Datei entsprechend einem angegebenen Format
  • fseek — Positioniert den Dateizeiger
  • fstat — Sammelt Informationen über eine Datei mittels eines offenen Dateizeigers
  • fsync — Synchronizes changes to the file (including meta-data)
  • ftell — Ermittelt die aktuelle Position des Dateizeigers
  • ftruncate — Kürzt eine Datei auf die angegebene Länge
  • fwrite — Binär-sicheres Dateischreiben
  • glob — Findet Dateinamen, die mit einem Muster übereinstimmen
  • is_dir — Prüft, ob der angegebene Dateiname ein Verzeichnis ist
  • is_executable — Prüft, ob der Dateiname 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 existiert und lesbar ist
  • is_uploaded_file — Prüft, ob die Datei mittels HTTP-POST upgeloadet wurde
  • is_writable — Prüft, ob in eine Datei geschrieben werden kann
  • is_writeable — Alias von is_writable
  • lchgrp — Changes group ownership of symlink
  • lchown — Changes user ownership of symlink
  • link — Erzeugt einen harten Link
  • linkinfo — Liefert Informationen über einen Link
  • lstat — Sammelt Informationen über eine Datei oder einen symbolischen Link
  • mkdir — Erstellt ein Verzeichnis
  • move_uploaded_file — Verschiebt eine hochgeladene Datei an einen neuen Ort
  • parse_ini_file — Parst eine Konfigurationsdatei
  • parse_ini_string — Analysiert einen Konfigurations-String
  • pathinfo — Liefert Informationen über einen Dateipfad
  • pclose — Schließt einen Prozess-Dateizeiger
  • popen — Öffnet einen Dateizeiger für einen Prozess
  • readfile — Gibt eine Datei aus
  • readlink — Liefert das Ziel eines symbolischen Links
  • realpath_cache_get — Get realpath cache entries
  • realpath_cache_size — Get realpath cache size
  • realpath — Löst einen Pfad in einen absoluten und eindeutigen auf
  • rename — Benennt eine Datei oder ein Verzeichnis um
  • rewind — Setzt die Position eines Dateizeigers auf den Anfang
  • rmdir — Löscht ein Verzeichnis
  • set_file_buffer — Alias von stream_set_write_buffer
  • stat — Sammelt Informationen über eine Datei
  • symlink — Erzeugt einen symbolischen Link
  • tempnam — Erzeugt eine Datei mit eindeutigem Dateinamen
  • tmpfile — Erstellt eine temporäre Datei
  • touch — Setzt die Zugriffs- und Modifikationszeit einer Datei
  • umask — Changes the current umask
  • unlink — Löscht eine Datei
add a note add a note

User Contributed Notes 8 notes

up
56
Christian
17 years ago
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.
up
-1
drapeko.com
15 years ago
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. :)
up
-2
tunnelareaten at gmail dot com
19 years ago
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");
  }
}
}

?>
up
-5
Gregor Mosheh
21 years ago
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)$/');
up
-5
mitra at mitra dot biz
21 years ago
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, ":");
up
-8
jdhurn at uberidx dot com
21 years ago
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);
}
up
-12
ob at babcom dot biz
11 years ago
a function based on "tunnelareaten at gmail dot com"s idea to search for files in a given directory by a searchstring or by fileextension.

I added support to search recursively through all sub-directories an to determine weather the filepath should be returned or not.

<?php
// recursive function to get contents of given folder by searchterm or fileextension
// (does not show folders)
// standards: Foldername:                    string
//            Searchterm:                    string
//            Searchtype:                    ext/search (file-extension or searchterm within filename)
//            SaveCompletePath:        true/1
// usage:     array FileSearch_r($Folder,$Search[,$SearchType,$SavePath])

function FileSearch_r($Dir,$Search,$SearchType="search",$SavePath=1) {
 
$Array=array();
 
$D=dir($Dir);
  while (
false!==($Entry=$D->read()))
    if (
$Entry!='.' && $Entry!='..') {
     
$Entry=$Dir.$Entry;
      if (
is_dir($Entry)) $Array=array_merge($Array,FileSearch_r($Entry.'/',$Search,$SearchType,$SavePath));
      else
          if (
$SearchType=="search"
                     
?substr_count($Entry,$Search)>0
                     
:($SearchType=="ext"
                         
?substr($Entry,-strlen($Search))===$Search
                         
:true))
             
$Array[]=$Entry;
    }
 
$D->close();
 
sort($Array,SORT_STRING);
  if(!(bool)
$SavePath) $Array=str_replace($Dir,"",array_values($Array));
  return
$Array;
}
?>
up
-9
regis at webstuff dot com dot br
21 years ago
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
To Top