我该如何使用PHP更改符号链接的目标?谢谢。
PHP可以使用shell_exec
或反引号操作符执行shell命令。
因此:
<?php
`rm thelink`;
`ln -s /path/to/new/place ./thelink`;
此命令将以运行Apache服务器的用户身份运行,因此您可能需要考虑这一点。
ln -sf
替换ln -s
(并删除rm
),这个解决方案比被接受的解决方案更好,因为它在Linux/Unix上能够原子性地替换链接目标,不会中断。似乎没有PHP函数/选项可以做到这一点(symlink()
没有force选项)。 - Déjà vu为了以原子方式执行此操作,而不会删除原始符号链接并无法创建新符号链接,您应该像下面这样使用ln
系统命令:
system(
'ln --symbolic --force --no-dereference ' .
escapeshellarg($new_target) . ' ' .
escapeshellarg($link),
$relinked
);
if (0 === $relinked) {
# success
}
else {
# failure
}
force
标志是必需的,以便在不失败的情况下更新现有链接,no-dereference
可避免将链接意外放置在旧符号链接目标目录中的菜鸟错误。
如果使用相对路径,最好 chdir()
到将包含 $link
的目录。