Funções do sistema de arquivos

Veja Também

Para funções relacionadas, consulte também as seções Diretório e Execução de Programas.

Para obter uma lista e a descrição dos vários empacotadors de URL que podem ser usados como arquivos remotos, veja também Protocolos e Wrappers suportados.

Índice

  • basename — Retorna a última parte do caminho
  • chgrp — Altera o grupo do arquivo
  • chmod — Modifica as permissões do arquivo
  • chown — Modifica o proprietário do arquivo
  • clearstatcache — Limpa o cache de estado de arquivos
  • copy — Copia arquivo
  • delete — Consulte unlink ou unset
  • dirname — Retorna o caminho para o diretório pai
  • disk_free_space — Retorna o espaço disponível no sistema de arquivos ou partição de disco
  • disk_total_space — Retorna o tamanho total de um sistema de arquivos ou partição de disco
  • diskfreespace — Sinônimo de disk_free_space
  • fclose — Fecha um ponteiro de arquivo aberto
  • fdatasync — Sincroniza dados (mas não metadados) ao arquivo
  • feof — Testa pelo fim-de-arquivo em um ponteiro de arquivo
  • fflush — Força a liberação do buffer para um arquivo
  • fgetc — Lê um caractere do ponteiro de arquivo
  • fgetcsv — Lê uma linha do ponteiro de arquivos e a interpreta como campos CSV
  • fgets — Lê uma linha de um ponteiro de arquivo
  • fgetss — Ler uma linha de um ponteiro de arquivo e retira as tags HTML
  • file_exists — Verifica se um arquivo ou diretório existe
  • file_get_contents — Lê todo o conteúdo de um arquivo para uma string
  • file_put_contents — Escreve dados em um arquivo
  • file — Lê todo o arquivo para um array
  • fileatime — Obtém o último horário de acesso do arquivo
  • filectime — Obtém o horário de modificação de inode do arquivo
  • filegroup — Lê o grupo do arquivo
  • fileinode — Lê o inode do arquivo
  • filemtime — Obtém o horário de modificação do arquivo
  • fileowner — Obtem o proprietário do arquivo
  • fileperms — Obtém permissões de arquivo
  • filesize — Obtém o tamanho do arquivo
  • filetype — Lê o tipo do arquivo
  • flock — Travamento consultivo portável de arquivo
  • fnmatch — Compara nome de arquivo com um padrão
  • fopen — Abre um arquivo ou URL
  • fpassthru — Imprime todo os dados restantes de um ponteiro de arquivo
  • fputcsv — Formata a linha como CSV e a escreve em um ponteiro de arquivo
  • fputs — Sinônimo de fwrite
  • fread — Leitura de arquivo segura para binário
  • fscanf — Interpreta a leitura de um arquivo de acordo com um formato
  • fseek — Procura (seeks) em um ponteiro de arquivo
  • fstat — Lê informações sobre um arquivo usando um ponteiro de arquivo aberto
  • fsync — Sincroniza mudanças ao arquivo (incluindo metadados)
  • ftell — Retorna a posição atual do ponteiro de leitura/gravação do arquivo
  • ftruncate — Trunca um arquivo a um tamanho especificado
  • fwrite — Escrita binary-safe em arquivos
  • glob — Acha caminhos que combinam com um padrão
  • is_dir — Diz se o caminho é um diretório
  • is_executable — Diz se um arquivo é executável
  • is_file — Informa se o arquivo é um arquivo comum
  • is_link — Informa se o arquivo é uma ligação simbólica
  • is_readable — Diz se o arquivo existe e se ele pode ser lido
  • is_uploaded_file — Informa se o arquivo foi enviado por POST HTTP
  • is_writable — Diz se o arquivo pode ser modificado
  • is_writeable — Sinônimo de is_writable
  • lchgrp — Modifica o grupo de porprietário da ligação simbólica
  • lchown — Modifica o proprietário da ligação simbólica
  • link — Criando uma ligação rígida
  • linkinfo — Obtém informação sobre uma ligação
  • lstat — Obtém informações sobre um arquivo ou ligação simbólica
  • mkdir — Cria um diretório
  • move_uploaded_file — Move um arquivo enviado para uma nova localização
  • parse_ini_file — Interpreta um arquivo de configuração
  • parse_ini_string — Interpreta uma string de configuração
  • pathinfo — Retorna informações sobre um caminho de arquivo
  • pclose — Fecha o ponteiro de arquivo de processo
  • popen — Abre um processo como ponteiro de arquivo
  • readfile — Exibe o conteúdo de um arquivo
  • readlink — Retornar o alvo de uma ligação simbólica
  • realpath_cache_get — Obter entradas de cache do caminho absoluto
  • realpath_cache_size — Obter o tamanho do cache do caminho absoluto
  • realpath — Retorna o path absoluto canonizado
  • rename — Renomeia um arquivo ou diretório
  • rewind — Retrocede a posição de um ponteiro de arquivos
  • rmdir — Remove um diretório
  • set_file_buffer — Sinônimo de stream_set_write_buffer
  • stat — Obtém informações sobre um arquivo
  • symlink — Cria uma ligação simbólica
  • tempnam — Cria arquivo com nome único
  • tmpfile — Cria um arquivo temporário
  • touch — Define horário de acesso e de modificação de arquivo
  • umask — Modificar a umask atual
  • unlink — Apaga um arquivo
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