| |
ю мы рассматривали выше. Ее обычно задействуют, если хотят
определить, существует ли еще объект, на который указывает символическая ссылка
в $linkname. Я предпочитаю пользоваться для этого вызовом stat(), т. к., по-
моему, ее название несколько более "читабельно".
Часть IV. Стандартные функции PHP 276
Нужно добавить, что можно совершенно спокойно удалять символические ссылки, не
опасаясь за содержимое основного файла. Это делается обычным способом — на-
пример, вызовом unlink() или rmdir().
Жесткие ссылки
И в конце этой главы я хочу рассмотреть еще один вид ссылок — жесткие ссылки.
Оказывается, создание символической ссылки — не единственный способ задать для
одного файла несколько имен. Главный недостаток символических ссылок, как вы,
наверное, уже догадались, — существование основного имени файла, на которое все
и ссылаются. Попробуйте удалить этот файл — и вся "паутина" ссылок, если
таковая
имелась, развалится на куски. Есть и другой недостаток: открытие файла, на
который
указывает ссылка, происходит несколько медленнее, т. к. системе нужно
проанализи-
ровать содержимое ссылки и установить связь с "настоящим" файлом. Особенно это
чувствуется, если одна ссылка указывает на другую, та — на третью и т. д.
уровней
на 10.
Жесткие ссылки позволяют вам иметь для одного файла несколько совершенно рав-
ноправных имен, причем доступ по ним осуществляется одинаково быстро. При этом,
если одно из таких имен будет удалено (например, при помощи unlink()), то сам
файл удалится только в том случае, если данное имя было последним, и других
имен
у файла нет. Сравните с символическими ссылками, удаляя которые файл испортить
нельзя.
Зарегистрировать новое имя у файла (то есть создать для него жесткую ссылку)
мож-
но с помощью функции link(). Ее синтаксис полностью идентичен функции
symlink(), да и работает она по тем же правилам, за исключением того, что
создает
не символическую, а жесткую ссылку. Фактически, вызов link() — это почти то же,
что и rename(), только старое имя файла не удаляется, а остается.
Напоминаю, работает это все только в Unix, но не в Windows. И почему только
до таких вещей не додумались парни из Microsoft?..
Глава 18
Запуск внешних
программ
Функции запуска внешних программ в PHP востребуются достаточно редко. Их "не-
популярность" объясняется прежде всего тем, что при использовании PHP програм-
мист получает в свое распоряжение почти все возможности, которые могут когда-
либо понадобиться, в частности, почтовые функции, на которые приходится львиная
доля вызовов внешних программ в других языках — например, в Perl. Тем не менее,
в числе стандартных функций языка присутствует полный набор средств, предназна-
ченных для запуска программ и утилит операционной системы.
string system(string $command [,int& return_var])
Эта функция, как и ее аналог в Си, запускает внешнюю программу, имя которой пе-
редано первым параметром, и выводит результат работы программы в выходной по-
ток, т. е. в браузер. Последнее обстоятельство сильно ограничивает область
примене-
ния функции.
Впрочем, задействуя функции перенаправления вывода, мы все-таки можем
получить и обработать то, что выдала нам запущенная программа, но стоит ли
игра свеч? Может быть, лучше воспользоваться более подходящими средст-
вами?
Если функции передан также второй параметр — переменная (именно переменная, а
не константа!), то в нее помещается код возврата вызванного процесса. Ясно, что
это
требует от PHP ожидания завершения запущенной программы — так он и поступает в
любом случае, даже если последний параметр не задан.
Не нужно и говорить, что при помощи этой функции можно запускать только те
команды, в которых вы абсолютно уверены. В частности, никогда не переда-
вайте функции system() данные, пришедшие из браузера пользователя
(предварительно не обработав их) — это может нанести серьезный урон ва-
шему серверу, если злоумышленник
|
|