|
|
 |
XXX. Filesystem functionsRequisiti
Non sono richieste librerie esterne per compilare questo modulo, ma se si desidera
avere il supporto per LFS (file di grandi dimensioni) su Linux, occorre avere
una versione recente di glibc e occorre compilare il PHP con i seguenti parametri:
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.
InstallazioneNon è necessaria nessuna installazione per usare queste
funzioni, esse fanno parte del core di PHP. Configurazione di Runtime
Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.
Tabella 1. Opzioni di configurazione per Filesystem e Streams | Nome | Default | Modificabile |
|---|
| allow_url_fopen | "1" | PHP_INI_ALL | | user_agent | NULL | PHP_INI_ALL | | default_socket_timeout | "60" | PHP_INI_ALL | | from | NULL | ?? | | auto_detect_line_endings | "Off" | PHP_INI_ALL |
Breve descrizione dei parametri
di configurazione.
- allow_url_fopen
boolean
Questa opzione abilita i wrapper URL per fopen, in modo da potere accedere
ad oggetti URL come file. Per default sono forniti wrapper
per accedere a file remoti
usando il protocollo ftp o http, alcune estensioni, tipo
zlib, possono registrarne altri.
Nota:
Questa opzione è stata aggiunta subito dopo il rilascio di PHP 4.0.3.
Per le versioni fino a 4.0.3 compresa si può disabilitare questa opzione
solo al momento della compila utilizzando il parametro di configurazione
--disable-url-fopen-wrapper.
- user_agent
string
Definisce un agente utente il PHP.
- default_socket_timeout
integer
Timeout di default (in secondi) per gli stream sui socket.
Nota:
Questa opzione di configurazione è stata inserita in PHP 4.3.0
- from="joe@example.com"
string
Imposta la password per l'ftp anonimo (il tuo indirizzo di posta elettronica).
- auto_detect_line_endings
boolean
Quando è attivato, il PHP esamina i dati letti da
fgets() e file() per vedere se si sta utilizzando
le convezioni di Unix, MS-Dos o Macintosh.
Questo permette al PHP di operare con sistemi Macintosh,
ma, per default, l'opzione è impostata a Off, poichè vi è una piccola
penalizzazione di velocità nel cercare di individuare il tipo di EOL per la prima riga; e anche
perchè in alcuni casi si è sperimentato che l'utilizzo del carriage-returns come separatore nei sistemi
Unix ha generato comportamenti non compatibili con il passato.
Nota:
Questa opzione è stata introdotta in PHP 4.3.0
Costanti predefinite
Queste costanti sono definite da questa estensione e
sono disponibili solo se l'estensione è stata compilata
nel PHP o se è stata caricata dinamicamente a runtime.
- Sommario
- basename -- Restituisce il nome del file dal percorso indicato
- chgrp -- Cambia il gruppo del file
- chmod -- Cambia le impostazioni del file
- chown -- Cambia il proprietario del file
- clearstatcache -- Libera la cache dello stato di un file
- copy -- Copia un file
- delete -- Vedere unlink() oppure unset()
- dirname -- Restituisce il nome della directory dal percorso indicato
- disk_free_space -- Restituisce lo spazio disponibile nella directory
- disk_total_space -- Restituisce lo spazio totale di una directory
- diskfreespace -- Alias di disk_free_space()
- fclose -- Chiude un puntatore a file aperto
- feof -- Verifica se è stata raggiunta la fine del file su un puntatore a file
- fflush -- Invia l'output in un file
- fgetc -- Prende un carattere da un puntatore a file
- fgetcsv -- Prende una riga da un puntatore a file e l'analizza in cerca di campi CSV
- fgets -- Prende una riga da un puntatore a file
- fgetss -- Prende una riga da un puntatore a file ed elimina i tag HTML
- file_exists -- Controlla se un file o directory esiste
- file_get_contents -- Legge un file all'interno di una stringa
- file_put_contents -- Write a string to a file
- file -- Legge l'intero file in un vettore
- fileatime -- Prende l'ora dell'ultimo accesso al file
- filectime -- Prende l'ora in cui l'inode del file è stato modificato
- filegroup -- Restituisce il gruppo di un file
- fileinode -- Restituisce il numero di inode del file
- filemtime -- Restituisce l'ora delle modifiche al file
- fileowner -- Restituisce il proprietario del file
- fileperms -- Restituisce i permessi del file
- filesize -- Restituisce la dimensione del file
- filetype -- Restituisce il tipo di file
- flock -- Sistema di bloccaggio file
- fnmatch -- Match filename against a pattern
- fopen -- Apre un file o un URL
- fpassthru -- Invia tutti i dati rimanenti su un puntartore a file
- fputs -- Alias di fwrite()
- fread -- Legge un file salvaguardando la corrispondenza binaria
- fscanf -- Analizza l'input da un file secondo un determinato formato
- fseek -- Sposta un puntatore sul file
- fstat -- Restituisce le informazioni riguardanti un file attraverso un puntatore al file aperto
- ftell -- Comunica la posizione di lettura/scrittura del puntatore al file
- ftruncate -- Tronca un file alla lunghezza data
- fwrite -- Scrive un file salvaguardando la corrispondenza binaria
- glob -- Find pathnames matching a pattern
- is_dir -- Dice se la stringa corrisponde ad una directory
- is_executable -- Dice se il file indicato è eseguibile
- is_file -- Dice se il file è un file regolare
- is_link -- Dice se il file è un link simbolico
- is_readable -- Dice se un file è leggibile
- is_uploaded_file -- Dice se un file fù caricato via HTTP POST.
- is_writable -- Dice se un file è scrivibile
- is_writeable -- Alias di is_writable()
- link -- Crea un hard link
- linkinfo -- Restituisce informazioni su un collegamento
- lstat -- Da informazioni su un file o un link simbolico
- mkdir -- Crea una directory
- move_uploaded_file -- Muove un file caricato in una nuova posizione
- parse_ini_file -- Legge il file di configurazione
- pathinfo -- Restituisce informazioni su un percorso di file
- pclose -- Chiude un puntatore ad un file di processo
- popen -- Apre un puntatore ad un file di processo
- readfile -- Invia un file
- readlink -- Restituisce il target di un link simbolico
- realpath -- Restituisce un percorso assoluto regolare
- rename -- Rinomina un file
- rewind -- Riavvolge la posizione di un puntatore a file
- rmdir -- Rimuove una directory
- set_file_buffer -- Alias di stream_set_write_buffer()
- stat -- Da informazioni su un file
- symlink -- Crea un link simbolico
- tempnam -- Crea un nome di file unico
- tmpfile -- Crea un file temporaneo
- touch -- Imposta l'ora di modifica di un file
- umask -- Cambia l'umask corrente
- unlink -- Cancella un file
add a note
User Contributed Notes
Filesystem functions
Storm Reaver
13-Apr-2004 01:48
The way to write files on server where it is not possible (e.g. Gorodok.net)
<?php
function killfile($ftp, $login, $pass, $filename){
$conn_id = ftp_connect($ftp);
$login_result = ftp_login($conn_id, $login, $pass);
if ((!$conn_id) || (!$login_result)) { return false; } else {
$del = ftp_delete($conn_id, $filename);
if (!del) { return false; } else {return true;}
}
ftp_close($conn_id);
}
killfile("gorodok.net", "login", "password", "/path/file.extension");
$fs = fopen("ftp://login:password@gorodok.net/path/file.extension", "w");
fclose($fs);
?>
ken at xzone9 dot com
16-Mar-2004 06:46
The following will work on UNIX (from peeweeks code submitted for "Windows")---
function ls ($curpath) {
$dir = dir($curpath);
echo("<b>$curpath</b>");
echo "<blockquote>";
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."/");
} else {
echo("$file<br>");
}
}
}
$dir->close();
echo "</blockquote>";
return;
}
//Use:
$startpath = "/home/mypath/";
ls($startpath);
http://iubito.free.fr
30-Dec-2003 10: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
function relativePath($path1, $path2='')
{
if ($path2 == '') {
$path2 = $path1;
$path1 = getcwd();
}
$path1 = trim($path1,'/');
$path2 = trim($path2,'/');
while (substr_count($path1, '//')) $path1 = str_replace('//', '/', $path1);
while (substr_count($path2, '//')) $path2 = str_replace('//', '/', $path2);
$arr1 = explode('/', $path1);
if ($arr1 == array('')) $arr1 = array();
$arr2 = explode('/', $path2);
if ($arr2 == array('')) $arr2 = array();
$size1 = count($arr1);
$size2 = count($arr2);
$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 11: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
17-Jul-2003 04: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');
aggarwal_deep at hotmail dot com
16-Jul-2003 08:43
The following souce is the combination of 3 different function ,does the listing of the whole files in directories or sub-directories of a base directory(given). And find out the maximum file size of given application files. for example it will tell the maximum file size of ppt file that is placed in the directory.
<?
function showExtension($file){
if(is_file($file)){
$fileInfo = pathinfo($file);
$extension=$fileInfo["extension"];
} else {
$extension="";
}
return $extension;
}
function fsize($size) {
$a = array("B", "KB", "MB", "GB", "TB", "PB");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,2)." ".$a[$pos];
}
function ls ($curpath) {
$dir = dir($curpath);
$file_namearr = array("ETC","PPT","XLS","DOC","PDF");
echo("<b>$curpath</b>");
echo "<blockquote>";
$file_sizearr = array(1,1,1,1,1);
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."/");
}
else {
$filext= strtoupper(showExtension($curpath.$file));
$curr_key = 0;
$curr_key = array_search($filext,$file_namearr);
if($curr_key){
$curr_file_size = $file_sizearr[$curr_key];
if(filesize($curpath.$file)>$curr_file_size){
$file_sizearr[$curr_key]= intval(filesize($curpath.$file));
}
}
}
}
}for($k=0;$k<5;$k++){
echo"<br>".$file_namearr[$k].":".fsize($file_sizearr[$k]);
}
$dir->close();
echo "</blockquote>";
return;
}
$startpath = "/home6/docmng/";
ls($startpath);
?>
l_domenech at yahoo dot ca
03-Jul-2003 04: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
16-May-2003 04: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, ":");
peeweek at altern dot org
09-May-2003 11:06
here is a function that recurses all directories in a Windows Tree then displays for each directory its contents.
function ls ($curpath) {
$dir = dir($curpath);
echo("<b>$curpath</b>");
echo "<blockquote>";
while ($file = $dir->read()) {
if($file != "." && $file != "..") {
if (is_dir($curpath.$file)) {
ls($curpath.$file."\\");
} else {
echo("$file<br>");
}
}
}
$dir->close();
echo "</blockquote>";
return;
}
Use:
$startpath = "D:\\something\\";
ls($startpath);
regis at webstuff dot com dot br
03-Apr-2003 02: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
Alex Chacón
13-Mar-2003 02:03
alex.chacon@terra.com
Hi
Here there is a function that recursively print all the directories in a Unix system from initial path in pre-order.
$pathInicial = "/home1/desarrollo/";
recorrerDirectorioTree ($pathInicial);
function recorrer DirectorioTree($pathGeneral)
{
echo $pathGeneral . "\n\n";
chdir($pathGeneral);
$dir = dir(".");
$dir-> rewind();
while ($fileName = $dir->read())
{
if ($fileName != "." && $fileName != "..")
{
if (is_dir($fileName) && !is_link($fileName))
{
echo "$fileName \n";
clearstatcache();
recorrerDirectorioTree($pathGeneral.$fileName. "/");
chdir($pathGeneral);
}
}
}
$dir->close();
return;
}
jdhurn at uberidx dot com
08-Mar-2003 01: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);
}
meheler at canada dot com
07-Mar-2002 05:55
Here is a useful function that checks for the existance of a file in PHP's include_path:
// Searches PHP's include_path variable for the existance of a file
// Returns the filename if it's found, otherwise FALSE.
// Only works on a *nix-based filesystem
// Check like: if (($file = file_exists_path('PEAR.php')) !== FALSE)
function file_exists_path($file) {
// Absolute path specified
if (substr($path,0,1)=='/')
return (file_exists($file))?realpath($file):FALSE;
$paths = explode(':',ini_get('include_path'));
foreach ($paths as $path) {
if (substr($path,-1)!='/') $path = "$path/";
if (file_exists("$path$file"))
return realpath("$path$file");
}
return FALSE;
}
Mike
| |