使用PHP更改符号链接的目标

时间:2010-03-23 04:01:56

标签: php linux symlink

如何使用PHP更改符号链接的目标? 感谢。

3 个答案:

答案 0 :(得分:8)

您可以使用unlink功能删除现有链接,并使用symlink功能重新创建指向新目标的链接。

symlink($target, $link);
.
.
unlink($link);
symlink($new_target, $link);

您需要对每个错误进行检查。

答案 1 :(得分:0)

PHP可以使用shell_execbacktick operator执行shell命令。

因此:

<?php
`rm thelink`;
`ln -s /path/to/new/place ./thelink`;

这将作为运行Apache服务器的用户运行,因此您可能需要牢记这一点。

答案 2 :(得分:0)

要以原子方式执行此操作,而不会有删除原始符号链接和无法创建新符号链接的风险,您应该像这样使用 ln 系统命令:

system(
    'ln --symbolic --force --no-dereference ' .
        escapeshellarg($new_target) . ' ' .
        escapeshellarg($link),
    $relinked
);
if (0 === $relinked) {
    # success
}
else {
    # failure
}

force 标志对于更新现有链接而不会失败是必要的,并且 no-dereference 避免了不小心将链接放入旧符号链接的目标目录中的新手错误。

如果使用相对路径,最好将 chdir() 指向包含 $link 的目录。