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

XXXVIII. Funciones del Sistema de Archivos

Requisitos

No se requieren bibliotecas externas para compilar esta extensión, pero si desea que PHP ofrezca soporte para LFS (archivos grandes) en Linux, entonces necesita tener una versión reciente de glibc y necesita compilar PHP con las siguientes banderas del compilador: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.

Instalación

No se necesita ninguna instalación para usar estas funciones, son parte del núcleo de PHP.

Configuración en tiempo de ejecución

El comportamiento de estas funciones está afectado por los valores definidos en php.ini.

Tabla 1. Opciones de Configuración del Sistema de Archivos y Secuencias

NombrePredeterminadoModificableCambios
allow_url_fopen"1"PHP_INI_SYSTEMPHP_INI_ALL en PHP <= 4.3.4. Disponible desde PHP 4.0.4.
user_agentNULLPHP_INI_ALLDisponible desde PHP 4.3.0.
default_socket_timeout"60"PHP_INI_ALLDisponible desde PHP 4.3.0.
from""PHP_INI_ALL 
auto_detect_line_endings"0"PHP_INI_ALLDisponible desde PHP 4.3.0.

A continuación se presenta una corta explicación de las directivas de configuración.

allow_url_fopen boolean

Esta opción habilita las envolturas fopen tipo URL que le permiten acceder a objetos URL como archivos. Existen envolturas predeterminadas para el acceso de archivos remotos usando los protocolos ftp o http, algunas extensiones como zlib pueden registrar envolturas adicionales.

Nota: Este parámetro puede ser definido únicamente en php.ini debido a razones de seguridad.

Nota: Esta opción fue introducida inmediatamente después del lanzamiento de la versión 4.0.3. Para versiones anteriores a, e incluyendo la 4.0.3, solo puede deshabilitar esta característica en tiempo de compilación usando el parámetro de configuración --disable-url-fopen-wrapper.

Aviso

En versiones de windows anteriores a PHP 4.3.0, las siguientes funciones no soportan el acceso de archivos remotos: include(), include_once(), require(), require_once() y las funciones imagecreatefromXXX en la extensión Referencia LVIII, Funciones para imágenes.

user_agent string

Definir el agente de usuario que PHP envía.

default_socket_timeout integer

Tiempo de espera predeterminado (en segundos) para secuencias basadas en sockets.

Nota: Esta opción de configuración fue introducida en PHP 4.3.0

from string

Definir la contraseña de ftp anónimo (su dirección de correo electrónico).

auto_detect_line_endings boolean

Cuando está habilitada esta opción, PHP examina los datos leídos por fgets() y file() para ver si está usando convenciones de final de líneo tipo Unix, MS-Dos o Macintosh.

Esto le permite a PHP interoperar con sistemas Macintosh, pero tiene un valor predeterminado de Off, ya que hay un impacto ligero de rendimiento cuando se detectan las convenciones EOL para la primera línea, y también porque las personas que usen retornos de carro como separador de elementos bajo sistemas Unix percibirían un comportamiento que no es compatible con versiones anteriores.

Nota: Esta opción de configuración fue introducida en PHP 4.3.0

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

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)

Ver también

Para funciones relacionadas, vea también las secciones Directorio y Ejecución de Programas.

Para una lista de las varias envolturas de URL que pueden ser usadas como archivos remotos, y su explicación, vea también Apéndice M.

Tabla de contenidos
basename --  Devuelve la parte del path correspondiente al nombre del archivo
chgrp -- Cambia el grupo de un archivo
chmod -- Cambia permisos de un archivo
chown -- Cambia el propietario de un archivo
clearstatcache -- Limpia la cache de estado de un archivo
copy -- Copia un archivo
delete -- Vea unlink() o unset()
dirname -- Devuelve la parte del path correspondiente al directorio
disk_free_space -- Devuelve el espacio disponible en el directorio
disk_total_space -- Devuelve el tamaño total de un directorio
diskfreespace -- Alias de disk_free_space()
fclose -- Cierra el apuntador a un archivo abierto
feof -- Verifica si el apuntador a un archivo está al final del archivo
fflush -- Vacía la salida hacia un archivo
fgetc -- Obtiene un caracter del archivo apuntado
fgetcsv -- Obtiene una linea del archivo apuntado y extrae los campos CSV
fgets -- Obtiene una línea desde el apuntador de archivo
fgetss -- Obtiene una lína desde el apuntador de archivo y elimina las etiquetas HTML
file_exists -- Verifica si un archivo o directorio existe
file_get_contents -- Lee un archivo entero en una cadena
file_put_contents -- Escribir una cadena sobre un archivo
file -- Lee un archivo entero hacia una matriz
fileatime -- Obtiene la hora del último acceso al archivo
filectime -- Obtiene la hora de modificación del inode del archivo
filegroup -- Obtiene el grupo del archivo
fileinode -- Obtiene el inode del archivo
filemtime -- Obtiene la hora de modificación del archivo
fileowner -- Obtiene el dueño del archivo
fileperms -- Obtiene los permisos del archivo
filesize -- Obtiene el tamaño del archivo
filetype -- Obtiene el tipo de archivo
flock -- Aviso de bloqueo de archivos portable
fnmatch -- Comparar un nombre de archivo contra un patrón
fopen -- Abre un archivo o URL
fpassthru -- Imprime todos los datos restantes en un apuntador de archivo
fputcsv --  Formatea la línea como CSV y la escribe en el archivo apuntado
fputs -- Alias of fwrite()
fread -- Lectura de archivos segura con material binario
fscanf -- Procesa la entrada desde un archivo de acuerdo a un formato
fseek -- Realiza una búsqueda sobre un apuntador de archivo
fstat -- Obtiene información sobre un archivo usando un apuntador de archivo abierto
ftell -- Indica la posición de lectura/escritura del apuntador de archivo
ftruncate -- Trunca un archivo a la longitud dada
fwrite -- Escritura sobre archivos, segura con material binario
glob -- Encontrar nombres de ruta coincidentes con un patrón
is_dir -- Indica si el nombre de archivo es un directorio
is_executable -- Indica si el archivo es ejecutable
is_file -- Indica si el archivo es un archivo regular
is_link -- Indica si el archivo es un enlace simbólico
is_readable -- Indica si es posible leer el archivo
is_uploaded_file -- Indica si un archivo fue cargado a través de HTTP POST
is_writable -- Indica si el nombre de archivo es escribible
is_writeable -- Alias of is_writable()
link -- Crea un enlace duro
linkinfo -- Consigue información sobre un enlace
lstat -- Entrega información sobre un archivo o enlace simbólico
mkdir -- Crea un directorio
move_uploaded_file -- Mueve un archivo cargado a una nueva ubicación
parse_ini_file -- Procesar un archivo de configuración
pathinfo -- Devuelve información sobre la ruta de un archivo
pclose -- Cierra un apuntador de archivo de proceso
popen -- Abre un apuntador de archivo de proceso
readfile -- Imprime un archivo
readlink -- Devuelve el objetivo de un enlace simbólico
realpath -- Devuelve el nombre de ruta absoluto simplificado
rename -- Renombra un archivo o directorio
rewind -- Retroceder la posición de un apuntador de archivo
rmdir -- Elimina un directorio
set_file_buffer -- Alias of stream_set_write_buffer()
stat -- Entrega información sobre un archivo
symlink -- Crea un enlace simbólico
tempnam -- Crear un archivo con un nombre único
tmpfile -- Crea un archivo temporal
touch -- Establece la hora de acceso y modificación de un archivo
umask -- Cambia la umask actual
unlink -- Elimina un archivo


basename> <filepro
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Funciones del Sistema de Archivos
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