IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Проблемы с symlink() (http://www.imho.ws/showthread.php?t=142884)

Yurij 03.02.2010 15:38

Проблемы с symlink()
 
Добрый день!
Возникли непонятки с symlink'ом.
Мне нужно создать симлинк на директорию и получить ссылку на неё.
Позже удалить симлинк.
Пробовал делать вот таким способом :

Код:

$target = APPLICATION_PATH.'/uploads/id/9/';//$target = APPLICATION_PATH."/uploads/id/$id/";
                   
$link = "/uploads/id/$id/"; //$link = "/uploads/id/9/";                         
                         
symlink($target, $link); //symlink(APPLICATION_PATH.'/uploads/id/9/','/uploads/id/9/');
...

clearstatcache();
unlink ($link)


- кидает эррор:
Ошибка:

Код:

Warning: symlink() [function.symlink]: Cannot create symlink, error code(3) бывает и error code(103)

Причём сделав вывод

Код:

echo '<a href="'.$link.'">asd</a>';
папка открывается, но scandir её не видит.
Колдуя с путями :ржать:(на уровне: APPLICATION_PATH.'/uploads/id/9/1.jpg ,.../uploads/id/ )иногда симлинк создаётся, но unlink его не удаляет.
В тех случаях, когда он создаётся - я не вычислил, за счёт чего он создаётся :ржать::ржать:
После удаления через Windows начинает снова кидать ошибки

Использую PHP 5.3 из под Windows
Пожалуйста подскажите, как с этим бороться :)

Borland 03.02.2010 16:04

Цитата:

Сообщение от Yurij (Сообщение 1696942)
PHP 5.3 из под Windows

Из-под какой Windows? Вообще говоря, под версиями младше Vista/Server2008 оно и не должно работать...

Yurij 03.02.2010 16:07

Позабыл написать - Windows 7 :)
В том то и дело, что иногда у меня симлинки создавались, только после ручного их удаления (через виндозу) PHP отказывается их заново создавать :)

Borland 03.02.2010 16:25

Честно говоря, в PHP не силён.
Однако нашёл как минимум 2 сообщения о багах PHP при работе с симлинками и точками монтирования под Windows...
А на страничке мануала http://php.net/manual/en/function.symlink.php нашлось обходное решение - использование стандартной Win-команды для создания симлинков.
Код:

<?php
define('SYMLINK_FILE', 0);
define('SYMLINK_DIR', 1);
define('SYMLINK_JUNCTION', 2);
function symlink ($target, $link, $flag = SYMLINK_FILE) {
    switch ($flag) {
      case SYMLINK_DIR: $pswitch = '/d'; break;
      case SYMLINK_JUNCTION: $pswitch = '/j'; break;
      case SYMLINK_FILE:
      default: $pswitch = ''; break;
    }
    // Change / to \ because it will break otherwise.
    $target = str_replace('/', '\\', $target);
    $link = str_replace('/', '\\', $link);
    return exec('mklink ' . $pswitch . ' "' . $link . '" "' . $target . '"');
}
?>


Yurij 03.02.2010 16:40

Спасибо!
Попробую ;)


Часовой пояс GMT +4, время: 03:21.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.