PHP 8.3.4 Released!

Funciones del Sistema de Archivos

Ver también

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

Para una lista y explicación de las distintas envolturas URL que se pueden usar como archivos remotos, vea también Protocolos y Envolturas soportados.

Tabla de contenidos

  • basename — Devuelve el último componente de nombre de una ruta
  • chgrp — Cambia el grupo del archivo
  • chmod — Cambia el modo de un fichero
  • chown — Cambia el propietario del fichero
  • clearstatcache — Limpia la caché de estado de un archivo
  • copy — Copia un fichero
  • delete — Véase unlink o unset
  • dirname — Devuelve la ruta de un directorio padre
  • disk_free_space — Devuelve el espacio disponible de un sistema de archivos o partición de disco
  • disk_total_space — Devuelve el tamaño total de un sistema de archivos o partición de disco
  • diskfreespace — Alias de disk_free_space
  • fclose — Cierra un puntero a un archivo abierto
  • fdatasync — Synchronizes data (but not meta-data) to the file
  • feof — Comprueba si el puntero a un archivo está al final del archivo
  • fflush — Vuelca la salida a un archivo
  • fgetc — Obtiene un carácter de un puntero a un archivo
  • fgetcsv — Obtiene una línea de un puntero a un fichero y la analiza en busca de campos CSV
  • fgets — Obtiene una línea desde el puntero a un fichero
  • fgetss — Obtiene un línea desde un puntero a un archivo y elimina las etiquetas HTML
  • file_exists — Comprueba si existe un fichero o directorio
  • file_get_contents — Transmite un fichero completo a una cadena
  • file_put_contents — Escribir datos en un fichero
  • file — Transfiere un fichero completo a un array
  • fileatime — Obtiene el momento del último acceso a un archivo
  • filectime — Obtiene el momento del último cambio del i-nodo de un archivo
  • filegroup — Obtiene el grupo de un archivo
  • fileinode — Obtiene el i-nodo del archivo
  • filemtime — Obtiene el momento de la última modificación de un archivo
  • fileowner — Obtiene el propietario de un archivo
  • fileperms — Obtiene los permisos de un fichero
  • filesize — Obtiene el tamaño de un fichero
  • filetype — Obtiene el tipo de fichero
  • flock — Bloqueo de ficheros recomendado y portable
  • fnmatch — Compara un nombre de fichero con un patrón
  • fopen — Abre un fichero o un URL
  • fpassthru — Escribe toda la información restante de un puntero a un archivo
  • fputcsv — Dar formato CSV a una línea y escribirla en un puntero a un fichero
  • fputs — Alias de fwrite
  • fread — Lectura de un fichero en modo binario seguro
  • fscanf — Analiza la entrada desde un archivo de acuerdo a un formato
  • fseek — Busca sobre un puntero a un fichero
  • fstat — Obtiene información acerca de un archivo usando un puntero al archivo abierto
  • fsync — Synchronizes changes to the file (including meta-data)
  • ftell — Devuelve la posición de lectura/escritura actual del puntero a un fichero
  • ftruncate — Trunca un archivo a una longitud dada
  • fwrite — Escritura de un archivo en modo binario seguro
  • glob — Buscar coincidencias de nombres de ruta con un patrón
  • is_dir — Indica si el nombre de archivo es un directorio
  • is_executable — Indica si el nombre de archivo es ejecutable
  • is_file — Indica si el nombre de fichero es un fichero normal
  • is_link — Indica si el nombre de archivo es un enlace simbólico
  • is_readable — Indica si un fichero existe y es legible
  • is_uploaded_file — Indica si el archivo fue subido mediante HTTP POST
  • is_writable — Indica si un archivo existe y es escribible
  • is_writeable — Alias de is_writable
  • lchgrp — Cambia el grupo de un enlace simbólico
  • lchown — Cambia el propietario de un enlace simbólico
  • link — Crea un enlace duro
  • linkinfo — Obtiene información acerca de un enlace
  • lstat — Da información acerca de un archivo o enlace simbólico
  • mkdir — Crea un directorio
  • move_uploaded_file — Mueve un archivo subido a una nueva ubicación
  • parse_ini_file — Analiza un fichero de configuración
  • parse_ini_string — Analiza una cadena de configuración
  • pathinfo — Devuelve información acerca de la ruta de un fichero
  • pclose — Cierra un proceso de un puntero a un fichero
  • popen — Abre un proceso de un puntero a un fichero
  • readfile — Realizar la salida de un fichero
  • readlink — Devuelve el objetivo de un enlace simbólico
  • realpath_cache_get — Obtiene las entradas de la caché de la ruta real
  • realpath_cache_size — Obtiene el tamaño de la caché de la ruta real
  • realpath — Devuelve el nombre de la ruta absoluta canonizado
  • rename — Renombra un fichero o directorio
  • rewind — Rebobina la posición de un puntero a un archivo
  • rmdir — Elimina un directorio
  • set_file_buffer — Alias de stream_set_write_buffer
  • stat — Da información acerca de un fichero
  • symlink — Crea un enlace simbólico
  • tempnam — Crea un fichero con un nombre de fichero único
  • tmpfile — Crea un archivo temporal
  • touch — Establece el momento de acceso y modificación de un archivo
  • umask — Cambia la máscara de usuario actual
  • unlink — Borra un fichero
add a note

User Contributed Notes 8 notes

up
63
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
-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
20 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
-10
drapeko.com
14 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
-8
mitra at mitra dot biz
20 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
-7
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
20 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