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.
Fájlrendszer Függvények
Bevezetés
Követelmények
Semmilyen külső könyvtár nem szükséges e kiterjesztés használatához, azonban ha a PHP-t LFS (nagy fájlok) támogatásával akarod használni Linuxon, szükséged van a legújabb glibc-re és a következő parancsot bele kell fordítanod a PHP-ba: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.
Telepítés
Semmilyen telepítés nem szükséges ezen függvények használatához, a PHP alapelemei.
Futásidejű beállítások
Az alábbi függvények viselkedése befolyásolható a php.ini segítségével.
| Név | Alapértelmezett | Változtatható | Megjegyzés |
|---|---|---|---|
| allow_url_fopen | "1" | PHP_INI_SYSTEM | PHP_INI_ALL PHP <= 4.3.4-ig. PHP 4.0.4 óta. |
| allow_url_include | "0" | PHP_INI_SYSTEM | PHP 5.2.0 óta. |
| user_agent | NULL | PHP_INI_ALL | PHP 4.3.0 óta. |
| default_socket_timeout | "60" | PHP_INI_ALL | PHP 4.3.0 óta. |
| from | "" | PHP_INI_ALL | |
| auto_detect_line_endings | "0" | PHP_INI_ALL | PHP 4.3.0 óta. |
A témába vágó konfigurációs direktívák rövid leírása
- allow_url_fopen boolean
-
Ez az opció engedélyezi fájlok URL-en keresztüli megnyitását URL burkolókkal. Az alapértelmezett burkolók távoli fájlok elérésére használhatóak ftp vagy http protokollon keresztül, ám néhány kiterjesztés pl.: a zlib is definiálhat kiegészítő burkolókat.
Note: Biztonsági okok miatt ezt az opciót csak a php.ini-ben lehet beállítani.
Note: Ezt az opciót azonnal a 4.0.3-as verzió megjelenése után vezették be. A 4.0.3-as verzióig csak kikapcsolni lehet ezt a lehetőséget fordítás közben a --disable-url-fopen-wrapper konfigurációs kapcsolóval.
WarningWindowson a PHP 4.3.0-ig a következő függvények nem támogatják a távoli fájlelérést: include(), include_once(), require(), require_once() és az imagecreatefromXXX függvények Grafika kiterjesztésben.
- allow_url_include boolean
-
Ez az opció lehetővé teszi fájlok URL-en keresztüli megnyitását URL burkolókkal a következő függvények számára: include(), include_once(), require(), require_once().
Note: E funkció használatához az allow_url_fopen-t be kell kapcsolni.
- user_agent string
-
A PHP által küldendő felhasználói ügynököt (user agent) definiálja.
- default_socket_timeout integer
-
Alapértelmezett időtúllépés (másodpercekben) socket alapú adatfolyamok esetében.
Note: Ezt a konfigurációs opciót PHP 4.3.0-ban vezették be.
- from string
-
Névtelen (anonymous) ftp jelszót definiál (e-mail cím).
- auto_detect_line_endings boolean
-
Ha be van kapcsolva, a PHP megvizsgálja a fgets() és file() függvények által bevizsgált adatot, hogy megállapítsa, hogy ezek Unix, MS-Dos vagy Macintosh stílusú sortöréseket tartalmaznak.
Ez lehetővé teszi a PHP-nak, hogy helyesen működjön Macintosh rendszereken, de alapértelmezett Off érték esetében nagyon kicsi teljesítmény hátrány, ami az első sor sortöréstípusának megállapítása miatt van, és mivel többen kocsi-visszákat használnak elemelválasztóként Unix rendszerek alatt, ezért ezek visszafelé nem kompatibilis hibát okozhatnak.
Note: Ezt a konfigurációs opciót PHP 4.3.0-ban vezették be.
Erőforrás típusok
Előre definiált állandók
Az itt listázott állandókat ez a kiterjesztés definiálja, és csak akkor elérhetőek, ha az adott kiterjesztés be van fordítva a PHP-be, vagy dinamikusan betöltött.
- 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)
- PATHINFO_FILENAME (integer)
- PHP 5.2.0 óta.
- FILE_USE_INCLUDE_PATH (integer)
- FILE_APPEND (integer)
- FILE_IGNORE_NEW_LINES (integer)
- FILE_SKIP_EMPTY_LINES (integer)
Lásd még
For related functions, see also the Könyvtárkezelés és a Programfuttatás részeket.
A különféle URL burkolók listájáért és leírásukért, amiket távoli fájloknál használhatsz lásd az List of Supported Protocols/Wrappers-et.
Table of Contents
- basename — A megadott elérési útvonalból kinyeri a fájlnevet
- chgrp — Megváltoztatja egy fájl csoportját
- chmod — Megváltoztatja a fájl hozzáférési jogosultságait
- chown — Megváltoztatja egy fájl tulajdonosát
- clearstatcache — Kiüríti a fájl státusz gyorsítótárat
- copy — Másol egy fájlt
- delete — Lásd az unlink és unset függvényeket
- dirname — A könyvtárnév komponenst adja vissza az elérési útból
- disk_free_space — Visszaadja a könyvtárban lévő szabad hely méretét
- disk_total_space — Visszaadja a könyvtár teljes méretét
- diskfreespace — Álnév: disk_free_space
- fclose — Bezár egy megnyitott fájl pointert
- feof — Megállapítja, hogy a fájl pointer a fájl végén van-e
- fflush — Fájlba írja a pufferelt kimenetet
- fgetc — Egy karaktert nyer ki a fájlpointertől
- fgetcsv — Kinyer egy sort a fájl pointerből és elemzi a CSV mezőket
- fgets — Kinyer egy sort a fájl pointerből
- fgetss — Kinyer egy sort a fájl pointerből és kiszedi belőle a HTML tageket
- file_exists — Ellenőrzi, hogy a megadott fájl vagy könyvtár létezik-e
- file_get_contents — Egy egész fájlt beolvas karakterláncba
- file_put_contents — Write a string to a file
- file — Egy teljes fájlt tömbbe olvas
- fileatime — Kinyeri az utolsó hozzáférési időpontját a fájlnak
- filectime — Gets inode change time of file
- filegroup — Kinyeri egy fájl csoportját
- fileinode — Kunyeri a fájl inode-ját
- filemtime — Kinyeri a fájl utolsó módosítási időpontját
- fileowner — Kinyeri a fájl tulajdonosát
- fileperms — Gets file permissions
- filesize — Kinyeri a fájl méretét
- filetype — Kinyeri a fájl típusát
- flock — Portable advisory file locking
- fnmatch — Match filename against a pattern
- fopen — Megnyit egy fájlt vagy URL-t
- fpassthru — Output all remaining data on a file pointer
- fputcsv — Format line as CSV and write to file pointer
- fputs — Álnév: fwrite
- fread — Binary-safe file read
- fscanf — Parses input from a file according to a format
- fseek — Seeks on a file pointer
- fstat — Gets information about a file using an open file pointer
- ftell — Megadja a fájlpointer olvasó/író helyzetét
- ftruncate — Levágja a fájl a megadott hosszig
- fwrite — Binary-safe file write
- glob — Find pathnames matching a pattern
- is_dir — Megállapítja, hogy a megadott fájlnév valódi könyvtár-e
- is_executable — Megállapítja hogy a megadott fájlnév futtatható-e
- is_file — Megállapítja hogy a megadott fájlnév valódi fájl-e
- is_link — Megállapítja, hogy a megadott fájlnév jelképes link-e
- is_readable — Megállapítja, hogy a megadott megadott fájlnév olvasható-e
- is_uploaded_file — Tells whether the file was uploaded via HTTP POST
- is_writable — Megállapítja hogy a megadott fájlnév írható-e
- is_writeable — Álnév: is_writable
- lchgrp — Megváltoztatja a jelképes link csoportját
- lchown — Changes user ownership of symlink
- link — Létrehoz egy nehéz linket
- linkinfo — Gets information about a link
- lstat — Gives information about a file or symbolic link
- mkdir — Könyvtárat hoz létre
- move_uploaded_file — Moves an uploaded file to a new location
- parse_ini_file — Parse a configuration file
- pathinfo — Visszaadja egy fájl elérési útjának az információit
- pclose — Closes process file pointer
- popen — Opens process file pointer
- readfile — Kiír egy fájlt
- readlink — Visszaadja egy jelképes link célpontját
- realpath — Returns canonicalized absolute pathname
- rename — Átnevez egy fájlt vagy könyvtárat
- rewind — Visszateszi a fájl pointert a fájl elejére
- rmdir — Töröl egy könyvtárat
- set_file_buffer — Álnév: stream_set_write_buffer
- stat — Információkat ad egy fájlról
- symlink — Létrehoz egy jelképes linket
- tempnam — Create file with unique file name
- tmpfile — Létrehoz egy ideiglenes fájlt
- touch — Beállítja az utolsó módosítási és hozzáférési dátumát a fájlnak
- umask — Megváltoztatja a jelenlegi umask-ot
- unlink — Töröl egy fájlt
Fájlrendszer
17-Mar-2007 01:24
25-Feb-2005 11: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");
}
}
}
?>
30-Dec-2003 07: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 ! :-)
22-Aug-2003 08: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)$/');
17-Jul-2003 01: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');
03-Jul-2003 01: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...)
16-May-2003 01: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, ":");
03-Apr-2003 10: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
08-Mar-2003 10: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);
}
