Сначала - выбор пути к файлу или директории, затем - чтение из директории и/или чтение из файла.
Путь к файлу
Абсолютный путь - это полный путь к файлу от корневой директории (папки) в файловой системе.
В Windows абсолютный путь к файлу в начинается с имени диска (например, "C:\Users\user1\Documents\html\file1.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/" | путь относительно текущей директории ("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-сценарии, продолжение: файлы".
Да есть плагин Wp-editor для этих целей. Весьма функциональный.