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