РНР 5 в подлиннике

Страница 182 из 554


Гпава 18. Работа с файлами

369

string basename (string $path)

Выделяет имя файла из полного пути Spath. Вот несколько примеров:

echo basename("/home/somebody/somefile.txt"); // выводит "somefile.txt"

echo basename("/"); // ничего не выводит

echo basename("/."); // выводит "."

echo basename("/./"); // также выводит "."

Обратите внимание на то, что функция basename о не проверяет существование файла. (Это же относится и к остальным функциям такого класса.) Она просто берет часть строки после самого правого слэша и возвращает ее. С облегчением можно также сказать, что функция basename о правильно обрабатывает как прямые, так и обратные слэши под Windows.

string dirname(string $path)

Возвращает имя каталога, выделенное из пути Spath. Функция довольно "разумна" и умеет обрабатывать нетривиальные ситуации, как это явствует из примеров:

echo dirname("/home/file.txt"); // выводит "/home" echo dirname("../file.txt"); // выводит

echo dirname("/file.txt"); // выводит "/" под Unix, "\" под Windows echo dirname("/"); // то же самое

echo dirname("file.txt"); // выводит "."

Заметьте, что если функции dirname() передать "чистое" имя файла, она вернет что означает "текущий каталог".

string tempnam(string $dir, string $prefix)

Генерирует имя файла в каталоге Sdir с префиксом Sprefix в имени, причем так, чтобы созданный под этим именем в будущем файл был уникален. Для этого к строке $prefix присоединяется некое случайное число. Например, вызов

tempnam( "/tmp", "temp") МОЖет ВОЗВратИТЬ ЧТО-ТО ТИПа /tmp/temp3a6b243c. ЕСЛИ такое

имя нужно создать в текущем каталоге, передайте sdir=".".

Если каталог $dir не указан или не существует, то функция возьмет вместо него имя временного каталога из настроек пользователя (обычно хранится в переменной окружения ТМР ИЛИ TMPDIR).

Помимо генерации имени функция также создает пустой файл с этим именем. Обратите внимание, что использовать tempnamo в следующем контексте опасно:

Sfname = tempnam ();-

Sf = fopen(Sfname, "w");

// работаем с временным файлом

Дело в том, что хотя функция и возвращает уникальное имя, все-таки существует вероятность, что между tempnamo и fopen() "вклинится" какой-нибудь другой процесс, в котором функция tempnamo сгенерировала идентичное имя файла. Такая вероятность очень мала, но все-таки она существует.

Для решения проблемы вы можете использовать идентификатор текущего процесса РНР, доступный через вызов функции getmypido, в качестве суффикса имени файла:

370

Часть IV. Стандартные функции РНР

$fname = tempnara() . getmypid(); $f = fopen ($fnarne, "w");

Так как идентификатор процесса у каждого скрипта гарантированно разный, это исключит возможность конфликта имен.

string realpath(string $path)

Эта функция очень часто оказывается чрезвычайно полезной. На нее возложена довольно непростая задача: преобразовать относительный путь в $path в абсолютный, т. е. начинающийся от корня. Например:

echo realpath("../t.php"); // абсолютный путь — например, /home/test.php echo realpath("."); // выводит имя текущего каталога

\_Замечание j

К сожалению, последний оператор в некоторых версиях РНР выводит не тот же самый результат, что и функция getcwd (). А именно, к имени текущего каталога "прицепляются" слэши, а иногда даже и /./. Так что, если без определения текущего каталога вам не обойтись, используйте getcwd().

Файл, который указывается в параметре $path, должен существовать, иначе функция возвращает false.

Функция realpath о также "расширяет" имена всех символических ссылок, которые могут встретиться в строке, задающей путь к файлу. Она всегда возвращает абсолютное каноническое имя, состоящее только из имен файлов и каталогов — но не имен ссылок.

Манипулирование целыми файлами

На самом деле всех перечисленных выше функций достаточно для реализации обмена с файлами любой сложности. Функции, описанные далее, упрощают работу с целыми файлами, когда нет необходимости читать их построчно или поблочно.

bool copy(string $src, string $dsfc)

Копирует файл с именем $src в файл с именем $dst. При этом, если файл $dst на момент вызова существовал, осуществляется его перезапись. Функция возвращает true, если копирование прошло успешно, а в случае провала — false.

bool rename (string $oldnaiae, string $newname)

Переименовывает (или перемещает, что одно и то же) файл с именем Soidname в файл с именем $newname. Если файл $newname уже существует, регистрируется ошибка, и функция возвращает false. То же происходит и при прочих неудачах. Если же все прошло успешно, возвращается true.

Внимание!

Функция не выполняет переименование файла, если его новое имя расположено в другой файловой системе (на другой смонтированной системе в Unix или на другом диске




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006