downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

basename> <filepro
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XXXIX. System plików

Wymagania

Żadne zewnętrzne biblioteki nie są potrzebne do zbudowania tego rozszeżenia, jeśli jednak potrzebujesz PHP z obsługą LFS (dużych plików) na Linuksie, musisz mieć nowy glibc i skompilować PHP z następującą flagą kompilatora: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.

Instalacja

By używać tych funkcji, nie trzeba niczego instalować. Są one częścią jądra PHP.

Konfiguracja czasu wykonywania

Na działanie tych funcji wpływają ustawienia zawarte w pliku php.ini.

Tabela 1. Filesystem and Streams Configuration Options

NameDefaultChangeableChangelog
allow_url_fopen"1"PHP_INI_SYSTEMPHP_INI_ALL in PHP <= 4.3.4. Available since PHP 4.0.4.
user_agentNULLPHP_INI_ALLAvailable since PHP 4.3.0.
default_socket_timeout"60"PHP_INI_ALLAvailable since PHP 4.3.0.
from""PHP_INI_ALL 
auto_detect_line_endings"0"PHP_INI_ALLAvailable since PHP 4.3.0.

Oto krótkie wyjaśnienie dyrektyw konfiguracji.

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.

Notatka: This setting can only be set in php.ini due to security reasons.

Notatka: 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.

Ostrzeżenie

On Windows versions prior to PHP 4.3.0, the following functions do not support remote file accessing: include(), include_once(), require(), require_once() and the imagecreatefromXXX functions in the Materiały źródłowe LX, Image Functions extension.

user_agent string

Define the user agent for PHP to send.

default_socket_timeout integer

Default timeout (in seconds) for socket based streams.

Notatka: This configuration option was introduced in PHP 4.3.0

from 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.

Notatka: This configuration option was introduced in PHP 4.3.0

Stałe predefinopwane

Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.

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)

Patrz także

Związane z tym działem funkcje, znajdziesz w rozdziale Katalog i Wykonywanie programów.

Listę wraz z opisem różnych wrapperów URL, które mogą zostać użyte jako zdalne pliki, znajdziesz tu Dodatek M.

Spis treści
basename -- Zwraca nazwę pliku, będącego składową ścieżki
chgrp -- Zmienia grupę pliku
chmod -- Zmienia prawa dostępu do pliku
chown -- Zmienia właściciela pliku
clearstatcache -- Czyści bufor statusu pliku
copy -- Kopiuje plik
delete -- Zobacz unlink() lub unset()
dirname -- Zwraca nazwę katalogu, będącego składową ścieżki
disk_free_space -- Zwraca ilość wolnego miejsca w katalogu
disk_total_space -- Zwraca całkowity rozmiar katalogu
diskfreespace -- Alias dla disk_free_space()
fclose -- Zamyka otwarty wskaźnik pliku
feof -- Sprawdza czy wskaźnik pliku jest na końcu pliku (EOF)
fflush -- Przekierowuje wyjście do pliku
fgetc -- Pobiera znak ze wskaźnika pliku
fgetcsv -- Pobiera linię ze wskanika pliku i przetwarza na pola CSV
fgets -- Pobiera linię ze wskaźnika pliku
fgetss -- Pobiera linię ze wskaźnika pliku i usuwa tagi HTML
file_exists -- Sprawdza czy plik lub katalog istnieje
file_get_contents -- Reads entire file into a string
file_put_contents -- Write a string to a file
file -- Czyta całą zawartość pliku do tablicy
fileatime -- Pobiera ostatni czas dostępu do pliku
filectime -- Pobiera i-węzłowy czas zmiany pliku
filegroup -- Pobiera grupę pliku
fileinode -- Pobiera i-węzeł pliku
filemtime -- Pobiera czas ostatniej modyfikacji pliku
fileowner -- Pobiera właściciela pliku
fileperms -- Pobiera prawa dostępu pliku
filesize -- Pobiera rozmiar pliku
filetype -- Pobiera typ pliku
flock -- Portable advisory file locking
fnmatch -- Match filename against a pattern
fopen -- Otwiera plik lub URL
fpassthru -- Output all remaining data on a file pointer
fputcsv --  Format line as CSV and write to file pointer
fputs -- Alias dla fwrite()
fread -- Odczyt pliku binarnie bezpieczy
fscanf -- Przetwarza dane z pliku według formatu
fseek -- Seeks on a file pointer
fstat -- Pobiera informacje o pliku używając otwartego wskaźnika pliku
ftell -- Mówi o pozycji odczyt/zapis wskaźnika pliku
ftruncate -- Przycina plik do podanej długości
fwrite -- Zapis pliku binarnie bezpieczny
glob -- Find pathnames matching a pattern
is_dir -- Mówi czy nazwa_pliku jest katalogiem
is_executable -- Mówi czy plik jest wykonywalny
is_file -- Mówi czy nazwa_pliku jest zwykłym plikiem
is_link -- Mówi czy nazwa_pliku jest dowiązaniem symbolicznym
is_readable -- Tells whether the filename is readable
is_uploaded_file -- Mówi czy plik został przysłany przez HTTP POST.
is_writable -- Tells whether the filename is writable
is_writeable -- Alias dla is_writable()
lchgrp -- Changes group ownership of symlink
lchown -- Changes user ownership of symlink
link -- Tworzy dowiązanie twarde
linkinfo -- Pobiera informacje o linku
lstat -- Podaje informacje o pliku lub dowiązaniu symbolicznym
mkdir -- Tworzy katalog
move_uploaded_file -- Przenieś uploadowany plik do innej lokalizacji
parse_ini_file -- Parse a configuration file
pathinfo -- Zwraca informacje o ścieżce do pliku
pclose -- Zamyka wskaźnik pliku do procesu
popen -- Otwiera wskaźnik pliku do procesu
readfile -- Wyświetla plik
readlink -- Zwraca cel linku symbolicznego
realpath -- Returns canonicalized absolute pathname
rename -- Renames a file or directory
rewind -- Rewind the position of a file pointer
rmdir -- Usuwanie katalogów
set_file_buffer -- Alias dla stream_set_write_buffer()
stat -- Gives information about a file
symlink -- Tworzy dowiązanie symboliczne
tempnam -- Create file with unique file name
tmpfile -- Tworzy plik tymczasowy
touch -- Ustawia czas modyfikacji pliku
umask -- Changes the current umask
unlink -- Kasowanie pliku


basename> <filepro
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes System plików
drapeko.com 23-May-2009 06:19
You have an array of directories (straightforward list of directories):

<?php
     $array
= array(
        
'/home/drapeko/var',
        
'/home/drapeko/var/y',
        
'/home/drapeko',
        
'/home',
        
'/var/libexec'
    
);
     );
?>

And you would like to transform this array to hierarchy of directories:

<?php
 $array
= array (
    
'home' => array (
        
'drapeko' => array (
            
'var' => array (
                
'y' => array()
             )
         )
     ),
    
'var' => array(
        
'libexec' => array()
     )
 );
?>

How can you do it?

First of all the below function will help us.

<?php
/**
 * This function converts real filesystem path to the string array representation.
 *
 * for example,
 * '/home/drapeko/var/y            will be converted to    $result_array['home']['drapeko']['var']['y']
 * '/home/drapeko/var/y/file.txt   will be converted to       $result_array['home']['drapeko']['var']['y']
 *
 * @param $path         realpath of the directory
 * @return string        string array representation of the path
 */
function pathToArrayStr($path) {
    
// TODO constants/configs?
    
$res_path = str_replace(array(':/', ':\\', '/', '\\', DIRECTORY_SEPARATOR), '/', $path);
    
// if the first or last symbol is '/' delete it (e.g. for linux)
    
$res_path = preg_replace(array("/^\//", "/\/$/"), '', $res_path);
    
// create string
    
$res_path = '[\''.str_replace('/', '\'][\'', $res_path).'\']';

     return
$res_path;
}
?>

It simply converts the real path of the file to array string representation.

How can you use this function? I know it looks like a little confusing. But it's quite simple. Consider the example below:

<?php
 $result
= array();
 
$check = array();
 foreach(
$array as $val) {
    
$str = pathToArrayStr($val, 'result');
     foreach(
$check as $ck) {
         if (
strpos($ck, $str) !== false) {
             continue
2;
         }
     }
    
$check[] = $str;
     eval(
'$result'.$str.' = array();');
 }
print_r($result);
?>

Heh, how do you find it? This approach has helped me very much. I hope you will find it useful. :)
Christian 17-Mar-2007 09:24
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.
tunnelareaten at gmail dot com 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
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
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
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
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
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
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
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);
}

 
show source | credits | sitemap | contact | advertising | mirror sites