Рубрика: Веб-разработка » PHP »

Чтение файлов и каталогов в php-сценарии

Сначала - выбор пути к файлу или каталогу, затем - чтение из каталога и/или чтение из файла.

Путь к файлу

Абсолютный путь - это полный путь к файлу от корневого каталога (папки) в файловой системе. В то время как абсолютный путь к файлу в Windows начинается с имени диска (например, "C:/www/html/file.html"), абсолютный путь к файлу страницы с веб-адресом http://mysite.ru/file1.php, которая находится на Unix-сервере (Apache), имеет вид

"/home/userlogin/public_html/mysite.ru/file.php"

где userlogin - логин пользователя на сервере.

Слеш (/) обозначает корневой каталог.

Путь к каталогу, который является корневым для веб-сайта, задается в кофигурации сервера и содержится в системной php-переменной

$_SERVER['DOCUMENT_ROOT']

В данном случае это ""/home/userlogin/public_html/mysite.ru"".

"/myplugin/file2.php"полный путь от корня сайта (адрес соответствующей веб-страницы - "http://site.ru//myplugin/file2.php")

Это значит, что в ссылках на локальные страницы сайта можно указывать только путь от корня сайта (без протокола и домена) "/myplugin/file2.php".
Относительный путь - это путь относительно документа, в котором используется ссылка на файл.

Например, пусть в папке сайта "myplugin" есть файл file2.php и папка "images", в которой находится файл "image1.jpg". Путь к файлу изображения из файла file2.php: "images/image1.jpg".

Но если в начале этого пути добавить слеш (/) , т.е. написать "/images/image1.jpg", это будет путь к другому файлу, который находится в другой папке "images" в корне сайта mysite.ru (см. рисунок).

Чтобы подняться на директорию вверх, нужно написать"../".

Например, в файле file2.php можно указать на файл файл file1.php (в корневой папке сайта) как на файл в родительском каталоге "../file1.php" или в корневом каталоге "/file1.php".

"/tmp/file.html"полный путь от корня сайта (соответствующий веб-адрес "http://site.ru//tmp/file.html")
"tmp/data/"путь относительно текущего каталога ("tmp" - это подкаталог текущего каталога, а "data" - подкаталог  каталога "tmp")
"./images/"подкаталог текущего каталога
"file.php"файл в  текущем каталоге
"./file.php"файл в  текущем каталоге
"../"родительский каталог
"../file.php"файл в родительском каталоге
"../../file.php"файл в каталоге, который на два уровня выше текущего каталога

Функции для работы с именами файлов и каталогов

bool file_exists(string $name)проверяет, существование файла или каталога с заданным именем
if ( !file_exists("file.txt") ) exit("Файл не существует");
string basename(string $path)возвращает имя файла из полного пути (т.е. имя файла без пути)
string dirname(string $path)возвращает имя каталога из полного пути; для текущего файла: dirname(__FILE__)
array pathinfo (string path [, int options])возвращает ассоциативный массив, который содержит элементы пути path: dirname, basename и extension.
options позволяет задать, какие элементы будут возвращены: PATHINFO_DIRNAME, PATHINFO_BASENAME и PATHINFO_EXTENSION.
string realpath(string $path)преобразует относительный путь в абсолютный, например, в сценарии, расположенном в корневой папке:
echo realpath("file1.php"); // выведет /home/userlogin/public_html/mysite.ru/file1.php
string tempname(string $dir, string $prefix)генерирует (уникальное) имя временного файла
is_readable($path)проверяет возможность чтения файла или каталога***
bool is_dir(string $path)возвращает TRUE, если $path - это путь к существующему каталогу ***.
bool is_file ( string $path )возвращает TRUE, если $path - это путь к существующему файлу (результат кэшируется***).
string getcwd (void)возвращает текущий каталог (например, "/home/userlogin/public_html/mysite.ru/myplugin")
int chdir( string $dir )изменяет текущий каталог (переходит в заданный каталог)
boolean chroot (string $path)изменяет корневой каталог

*** Результаты функций, возвращающих информацио о состоянии файлов, кэшируются. Это функции stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().
Если во время выполнения php-скрипта состояние файла может изменяться, и это нужно проверять, следует очищать кэш. Это делает функция clearstatcache();

Чтение каталога

Если прочитать все элементы внутри каталога, в списке результатов окажутся элементы "." (текущий каталог) и ".." (родительский каталог) , что следует учитывать при обработке прочитанных элементов каталога.

<?php
if ($handle = opendir('.')) { // открыт текущий каталог
  while (false !== ($file = readdir($handle)))   {
    if ($file != "." && $file != "..")
    {
      echo "$file" . "<br/>";
    }
  }
  closedir($handle);
}
?>
resourse opendir (string $path)открывает каталог, например, текущий каталог можно открыть так:
opendir('.');
string readdir (resource $handle)Возвращает имя следующего по порядку элемента каталога, для которого создан дескриптор $handle (порядок следования элементов зависит от файловой системы).
void rewinddir (resource $handle)сбрасывает дескриптор каталога $handle (чтобы он указывал на начало каталога)
void closedir ($handle)закрывает каталог

Чтение каталога без создания дискриптора:

array scandir (string $path [, int order])возвращает массив файлов и каталогов из заданного каталога, ессли каталог не найден, возвращает FALSE и генерирует сообщение об ошибке уровня E_WARNING.
По умолчанию элементы сортируются в алфавитном порядке, а если необязательный параметр order равен 1, - по убыванию.
array glob ( string pattern [, int flags] )возвращает массив файлов и каталогов, пути к которым соответствуют заданному шаблону pattern, а в случае ошибки возвращает FALSE.
флаги:
GLOB_MARK - добавляет слеш к каждому возвращаемому пути
GLOB_NOSORT - возвращает файлы без сортировки
GLOB_NOCHECK - возвращает шаблон , если не был найден ни один файл.
GLOB_NOESCAPE - обратные слеши не экранируют метасимволы
GLOB_BRACE - раскрывает {a,b,c} для совпадения с 'a', 'b' или 'c'
GLOB_ONLYDIR - возвращает только катологи

Все файлы с расширением ".txt" из папки "texts" в корневой папке сайта:

foreach (glob("/texts/*.txt") as $v){
 $fname=basename($v);
 echo($fname. "<br>");
}

Продолжение - о чтении данных из файла - в следующей статье, которая называется
"Чтение файлов и каталогов в php-сценарии, продолжение: файлы".

Опубликовано в рубрике PHP | с метками . |

Один комментарий на «Чтение файлов и каталогов в php-сценарии»

  1. Иван говорит:

    Да есть плагин Wp-editor для этих целей. Весьма функциональный.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *