Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010
Откуда: Киров
Помог: 6 раз(а)
|
Работая над своим проектом и решая очередную задачу, я столкнулся необходимостью использования символических ссылок на файлы. Все бы ничего, но для windows php-функции для работы с символическими ссылками не реализованы. На сервере unix, однако разработка ведется в среде windows на Денвере.
Немного погуглив, я обналужил - в винде таки есть поддержка символических ссылок!!! Правда нормальная поддержка симлинков появилась сравнительно недавно, и если у вас WinXP, то вам ничего не светит.
Итак, для работы вам понадобится Windows Vista или старше. ИМХО, конечно, лучше Windows 7. В этих версиях появилась утилита mklink, с помощью которой мы и будем выкручиваться.
Функция symlink для windows:
PHP:
скопировать код в буфер обмена
//если винда младше висты - неудача //меняем слеши на виндовый манер if(!exec("mklink $link $file", $out, $err) OR $err!=0 ) return false; return true; } }
Функция is_link для windows:
(функцию называем islink, ибо ф-я is_link есть и в windows-версии php, хотя она и не имеет смысла)
PHP:
скопировать код в буфер обмена
function islink($link){ //если не винда, используем стандартную is_link() //винда младше висты - неудача //меняем слеши на виндовый манер if(!exec("dir $link /a-d", $out, $err) OR !preg_match('/<SYMLINK>/i', utf8_encode($out[5 ]))) return false; //$out[5] - это нужная нам строка в выводе return true; }
Необходимая строка вывода, по которой мы определяем является ли файл символической ссылкой, у меня появляется на 5 позиции ($out[5]). Не знаю для всех ли версий интерпретаторов командных строк это будет верно. В крайнем случае можно будет сделать обход по массиву $out.
В функциях мы проверяем операционную систему, на которой работает php и номер сборки windows (6xxx - vista, 7xxx - windows 7).
Надо сказать, что эти функции работают в десятки раз медленнее, чем их юниксовый аналог. Однако для вас это может оказаться не принципиальным. Я, например, провожу эти операции в цикле по списку из 1000 файлов - минуту-две ждать приходится =(
Жду комментарии. Спасибо!(Отредактировано автором: 11 Июня, 2010 - 15:30:25)
|