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.
Filesystem Functions
Ver también
For related functions, see also the Directory and Program Execution sections.
For a list and explanation of the various URL wrappers that can be used as remote files, see also Lista de Protocolos/Envolturas Soportadas.
Table of Contents
- 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
- lchgrp — Changes group ownership of symlink
- lchown — Changes user ownership of symlink
- 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
Filesystem Functions
Christian
17-Mar-2007 10:24
17-Mar-2007 10:24
tunnelareaten at gmail dot com
25-Feb-2005 08:27
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
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
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
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
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
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
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
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);
}
