|
|
XXXI. Funkce filesyst�mu
Pro toto roz���en� nejsou t�eba ��dn� extern� knihovny, ale jestli�e chcete,
aby PHP na Linuxu podporovalo LFS (velk� soubory), pot�ebujete aktu�ln�
knihovnu glibc a mus�te PHP zkompilovat s t�mito p�ep�na�i p�eklada�e:
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.
K pou��v�n� t�chto funkc� nen� t�eba ��dn�
instalace, jsou sou��st� j�dra PHP.
Chov�n� t�chto funkc� je ovlivn�no nastaven�m parametr� v php.ini.
Tabulka 1. Filesystem and Streams Configuration Options Name | Default | Changeable |
---|
allow_url_fopen | "1" | PHP_INI_SYSTEM | user_agent | NULL | PHP_INI_ALL | default_socket_timeout | "60" | PHP_INI_ALL | from | NULL | ?? | auto_detect_line_endings | "Off" | PHP_INI_ALL |
Zde je stru�n� vysv�tlen�
konfigura�n�ch direktiv.
- allow_url_fopen
boolean
This option enables the URL-aware fopen wrappers that enable
accessing URL object like files. Default wrappers are provided for
the access of remote files
using the ftp or http protocol, some extensions like
zlib may register additional
wrappers.
Pozn�mka:
This setting can only be set in php.ini due to security reasons.
Pozn�mka:
This option was introduced immediately after the release of version
4.0.3. For versions up to and including 4.0.3 you can only disable this
feature at compile time by using the configuration switch
--disable-url-fopen-wrapper.
- user_agent
string
Define the user agent for PHP to send.
- default_socket_timeout
integer
Default timeout (in seconds) for socket based streams.
Pozn�mka:
This configuration option was introduced in PHP 4.3.0
- from="[email protected]"
string
Define the anonymous ftp password (your email address).
- auto_detect_line_endings
boolean
When turned on, PHP will examine the data read by
fgets() and file() to see if it
is using Unix, MS-Dos or Macintosh line-ending conventions.
This enables PHP to interoperate with Macintosh systems,
but defaults to Off, as there is a very small performance penalty
when detecting the EOL conventions for the first line, and also
because people using carriage-returns as item separators under
Unix systems would experience non-backwards-compatible behaviour.
Pozn�mka:
This configuration option was introduced in PHP 4.3.0
Tyto konstanty jsou definov�ny t�mto roz���en�m a budou k dispozici pouze
tehdy, bylo-li roz���en� zkompilov�no spole�n� s PHP nebo dynamicky zavedeno
za b�hu.
Pro p��buzn� funkce viz tak� sekce Adres��e
a Spou�t�n� program�.
Pro seznam a vysv�tlen� r�zn�ch URL wrapper�, kter� mohou b�t pou�ity
jako vzd�len� soubory, viz tak� sekci L.
- Obsah
- basename -- Vr�t� ��st cesty obsahuj�c� n�zev souboru
- chgrp -- Zm�nit skupinu souboru
- chmod -- Zm�nit m�d souboru
- chown -- Zm�n� vlastn�ka souboru
- clearstatcache -- Vyma�e cache stavu soubor�
- copy -- Zkop�ruje soubor
- delete -- Fale�n� polo�ka manu�lu
- dirname -- Vrac� ��st cesty obsahuj�c� n�zev adres��e
- disk_free_space -- Returns available space in directory
- disk_total_space -- Returns the total size of a directory
- diskfreespace -- Vr�t� diskov� prostor dostupn� v adres��i
- fclose -- Zav�e otev�en� deskriptor souboru
- feof -- Test na konec souboru
- fflush -- Zap�e obsah v�stupn�ho bufferu
- fgetc -- Na�te 1 znak ze souboru
- fgetcsv --
Na�te ��dek ze souboru a parsuje ho na CSV hodnoty
- fgets -- P�e�te ��dek ze souboru
- fgetss --
P�e�te ��dek ze souboru a odstran� HTML zna�ky
- file_exists -- Zjist�, zda soubor existuje
- file_get_contents -- Reads entire file into a string
- file_put_contents -- Write a string to a file
- file -- Na�te cel� soubor do pole
- fileatime -- Vrac� �as posledn�ho p��stupu k souboru
- filectime -- Vrac� �as zm�ny inodu souboru
- filegroup -- Vrac� skupinu pro soubor
- fileinode -- Vrac� inode souboru
- filemtime -- Vrac� �as zm�ny souboru
- fileowner -- Vrac� vlastn�ka souboru
- fileperms -- Vrac� p��stupov� pr�va k souboru
- filesize -- Vrac� velikost souboru
- filetype -- Vrac� typ souboru
- flock -- Jednotn� "portable advisory" zamyk�n�
souboru
- fnmatch -- Match filename against a pattern
- fopen -- Otev�e soubor nebo URL
- fpassthru --
Vyp�e v�echna zb�vaj�c� data v souboru
- fputs -- Zap�e do souboru
- fread -- Bin�rn� bezpe�n� �ten� ze souboru
- fscanf -- Parsuje vstup ze souboru podle form�tu
- fseek -- Posouv� ukazatel v souboru
- fstat --
Vrac� informace o otev�en�m souboru
- ftell -- Vrac� pozici v souboru
- ftruncate --
Zkr�t� soubor na danou d�lku
- fwrite -- Bin�rn� bezpe�n� z�pis do souboru
- glob -- Find pathnames matching a pattern
- is_dir -- Zjist�, zda je dan� soubor adres��em
- is_executable -- Zjist�, zda je soubor spustiteln�
- is_file --
Zjist�, zda se jedn� o oby�ejn� (regular) soubor
- is_link --
Zjist�, zda se jedn� o symbolick� odkaz (link)
- is_readable --
Zjist�, zda lze ze souboru ��st
- is_uploaded_file -- Zjist�, zda byl soubor uploadov�n pomoc� HTTP POST
- is_writable -- Zjist�, zda lze do souboru zapisovat
- is_writeable -- Alias of is_writable()
- link -- Vytvo�� hard link
- linkinfo -- Vrac� informaci o odkazu (linku)
- lstat --
Zji��uje informace o souboru nebo symbolick�m odkazu
- mkdir -- Vytvo�� adres��
- move_uploaded_file -- P�esune uploadovan� soubor na nov� m�sto
- parse_ini_file -- Parse a configuration file
- pathinfo -- Returns information about a file path
- pclose -- Zav�e procesov� soubor (rouru)
- popen -- Otev�e procesov� soubor (rouru)
- readfile -- Vyp�e soubor
- readlink -- Vrac� c�l symbolick�ho odkazu
- realpath -- Vr�t� absolutn� cestu v kanonick�m tvaru
- rename -- P�ejmenuje soubor
- rewind -- Vr�t� ukazatel v souboru na za��tek
- rmdir -- Odstran� adres��
- set_file_buffer --
Nastav� buffer pro soubor
- stat -- Zji��uje informace o souboru
- symlink -- Vytvo�� symbolick� odkaz
- tempnam -- Vytvo�� soubor s unik�tn�m n�zvem
- tmpfile -- Vytvo�� do�asn� soubor
- touch -- Nastavit �as zm�ny souboru
- umask -- Zm�n� sou�asn� nastaven� umask
- unlink -- Smazat soubor
add a note
User Contributed Notes
Funkce filesyst�mu
ben at nullcreations dot net
14-Nov-2004 10:29
Directed at: fankounter at libero dot it
Erm, I think you missed glob() which does what you're doing, only much more efficiently.
see:
fankounter at libero dot it
05-Nov-2004 02:31
// ls(dir,pattern) return file list in "dir" folder matching "pattern"
// ls("path","module.php?") search into "path" folder for module.php3, module.php4, ...
// ls("images/","*.jpg") search into "images" folder for JPG images
function ls($__dir="./",$__pattern="*.*")
{
settype($__dir,"string");
settype($__pattern,"string");
$__ls=array();
$__regexp=preg_quote($__pattern,"/");
$__regexp=preg_replace("/[\\x5C][\x2A]/",".*",$__regexp);
$__regexp=preg_replace("/[\\x5C][\x3F]/",".", $__regexp);
if(is_dir($__dir))
if(($__dir_h=@opendir($__dir))!==FALSE)
{
while(($__file=readdir($__dir_h))!==FALSE)
if(preg_match("/^".$__regexp."$/",$__file))
array_push($__ls,$__file);
closedir($__dir_h);
sort($__ls,SORT_STRING);
}
return $__ls;
}
m2pc (at) hotmail.com
07-Oct-2004 04:18
After searching all over the place to find a function to do what I wanted, I wrote the following:
/*
** Returns an array of valid drives on the system (a:, b:, etc.)
*/
function getSystemDrives () {
// Initialize
$aResult = Array ();
// Loop from A-Z and try opening the root dir
for ($letter = 'A'; $letter <= 'Z'; $letter ++) {
if (is_dir ($letter . ":"))
$aResult [] = $letter . ":";
}
// Return results
return ($aResult);
}
It simply returns an array of valid drives as seen from the server (A:, B:, etc.). This obviously is targeted to Win32 installations only.
Storm Reaver
13-Apr-2004 02: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("", "w");
fclose($fs);
?>
ken at xzone9 dot com
16-Mar-2004 08: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 12: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
23-Aug-2003 12: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 05: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 09: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 05: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 05:10
[email protected] 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 12: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 03: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 04:03
[email protected]
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 03: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 07: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
| |