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.
Bestands-systeem functies
Introductie
Afhankelijkheden
Deze functies zijn beschikbaar als onderdeel van de standaard module die altijd beschikbaar is.
Installatie
Er zijn geen handelingen nodig m.b.t. tot installatie voor deze functies, deze maken deel uit van de kern van PHP.
Configuratie tijdens scriptuitvoer
Het gedrag van deze functies wordt beïnvloed vanuit php.ini.
| Naam | Standaard waarde | Veranderbaar |
|---|---|---|
| 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 |
Here's a short explanation of the configuration directives.
- allow_url_fopen boolean
-
Deze optie activeert de URL-uitgeruste fopen wrappers die het mogelijk maken om URL objekten zoals bestanden te openen. Standaard wrappers zijn geleverd om toegang te krijgen tot externe bestanden die gebruik maken van ftp of http protocol. Sommige extensies zoals zlib kunnen als extra wrapper geregistreerd worden.
Note: Deze optie was geintroduceerd onmiddelijk na het uitkomen van versie 4.0.3. Voor versies tot en met 4.0.3 kan je deze functionaliteit alleen maar uitschakelen tijdens het compilen met de optie --disable-url-fopen-wrapper .
WarningOp Windows versie voor PHP 4.3.0, ondersteunen de volgende functies geen externe bestands toegang: include(), include_once(), require(), require_once() en de imagecreatefromXXX functie in de Image extensie.
- user_agent string
-
Defineert de user agent die door PHP wordt meegezonden.
- default_socket_timeout integer
-
Standaard timeout (in seconden) voor socket gebaseerde streams.
Note: Deze configuratie optie is geïntroduceerd in PHP 4.3.0.
- from="joe@example.com" string
-
Defineert het anonieme ftp wachtwoord (je eigen email adres).
- auto_detect_line_endings boolean
-
Als het wordt aangezet, zal PHP de data gelezen via fgets() en file() onderzoeken om te kijken of het Unix, MS-Dos of Macintosh regeleindes gebruikt.
Dit zorgt ervoor dat PHP ook werkt op Macintosh systemen, maar staat standaard uit, omdat er een hele kleine winst valt te halen uit het vinden van EOL voor de eerste regel, en ook omdat mensen die carriage-returns gebruiken om objekten te onderscheiden onder Unix niet-achterwaardse-compatible problemen kunnen ervaren.
Note: Deze configuratie optie is geïntroduceerd in PHP 4.3.0.
Resource types
Voorgedefinieerde constanten
Deze constanten worden gedefinieerd door deze extensie, en zullen alleen beschikbaar zijn als de extensie met PHP is meegecompileerd, of als deze dynamisch is geladen vanuit een script.
- 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)
- FILE_USE_INCLUDE_PATH (integer)
- FILE_APPEND (integer)
- FILE_IGNORE_NEW_LINES (integer)
- FILE_SKIP_EMPTY_LINES (integer)
Zie ook
Voor gerelateerde functies kan je ook kijken bij de secties van Directories en Programma's uitvoeren.
Voor een lijst en uitleg van verschillende URL wrappers die gebruikt kunnen worden met externe bestanden, zie ook List of Supported Protocols/Wrappers.
Table of Contents
- basename — Geeft het bestandsnaam van een pad terug
- chgrp — Veranderd de groep van een bestand
- chmod — Verandert de modus van een bestand
- chown — Veranderd de eigenaar van een bestand
- clearstatcache — Leegt de bestands-status cache
- copy — Kopieert een bestand
- delete — Zie unlink of unset
- dirname — Geeft de foldernaam van het pad terug
- disk_free_space — Geeft de beschikbare vrije ruimte in een folder terug
- disk_total_space — Geeft de totale ruimte van een folder terug
- diskfreespace — Alternatief voor disk_free_space
- fclose — Sluit een open bestands pointer
- feof — Test op einde-van-bestand van een bestands pointer
- fflush — Schrijft de output naar een bestand
- fgetc — Haalt één teken op uit de bestands pointer
- fgetcsv — Haalt een regel op van de bestands pointer en benoemt hem op CSV velden
- fgets — Haalt een regel op van de bestands pointer
- fgetss — Haalt een regel op van de bestands pointer en stript de HTML tags
- file_exists — Kijkt of een bestand of directorie bestaat
- file_get_contents — Leest een bestand volledig in een string
- file_put_contents — Schrijft een string naar een bestand
- file — Leest het volledige bestand in een array
- fileatime — Haalt de laatste toegangs tijd op van een bestand
- filectime — Haalt de 'inode verander' tijd op van een bestand
- filegroup — Leest de groep van een bestand uit
- fileinode — Haalt de inode op van een bestand
- filemtime — Haalt de 'laatst gewijzigd' tijd op van een bestand
- fileowner — Leest de eigenaar van een bestand uit
- fileperms — Leest de permissies van een bestand uit
- filesize — Leest de grootte van een bestand uit
- filetype — Leest het type van een bestand uit
- flock — Portable op advies gebaseerde bestands blokkering
- fnmatch — Controleert het bestandsnaam op een patroon
- fopen — Opent een bestand of URL
- fpassthru — Geeft alle overgebleven data weer van een bestands pointer
- fputcsv — Format line as CSV and write to file pointer
- fputs — Alternatief voor fwrite
- fread — Binair veilig bestand lezen
- fscanf — Ontleed de invoer van een bestand volgens een formaat
- fseek — Zoekt in een bestands pointer
- fstat — Verzameld de statestieken van een bestand geopend door de bestandspointer
- ftell — Geeft de positie in een bestand terug
- ftruncate — Kapt een bestand af tot een gegeven lengte
- fwrite — Binair veilig bestand schrijven
- glob — Zoekt padnamen die met een patroon overeen komen
- is_dir — Zegt of een bestandsnaam een folder is
- is_executable — Zegt of een bestandsnaam een executable is
- is_file — Zegt of een bestandsnaam een bestand is
- is_link — Zegt of een bestandsnaam een symbolic link is
- is_readable — Zegt of een bestandsnaam gelezen kan worden
- is_uploaded_file — Zegt of een bestandsnaam geupload is via HTTP POST
- is_writable — Zegt of een bestandsnaam schrijfbaar is
- is_writeable — Alternatief voor is_writable
- lchgrp — Changes group ownership of symlink
- lchown — Changes user ownership of symlink
- link — Maakt een hard link
- linkinfo — Haalt informatie over een link op
- lstat — Geeft informatie over een bestand of een symbolic link
- mkdir — Maakt een folder aan
- move_uploaded_file — Verplaatst een geuploade bestand naar een nieuwe lokatie
- parse_ini_file — Verwerkt een configuratie bestand
- pathinfo — Geeft informatie over een pad
- pclose — Sluit proces bestands pointer
- popen — Opent een proces bestands pointer
- readfile — Laat de inhoud van een bestand zien
- readlink — Geeft het doel van een symbolic link weer
- realpath — Geeft de gebruikelijke absolute padnaam terug
- rename — Hernoemt een bestand
- rewind — Spoelt de positie van een bestands pointer terug
- rmdir — Verwijdert een folder
- set_file_buffer — Alias van stream_set_write_buffer
- stat — Geeft informatie over een bestand
- symlink — Maakt een symbolic link aan
- tempnam — Maakt een bestand met een unieke bestandsnaam
- tmpfile — Maakt een tijdelijke bestand aan
- touch — Veranderd de laatste toegangs- en laatste wijzig tijd van een bestand
- umask — Veranderd de huidige umask
- unlink — Verwijdert een bestand
Bestands-systeem
17-Mar-2007 10:24
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");
}
}
}
?>
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 ! :-)
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)$/');
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');
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...)
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, ":");
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
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);
}
