开发者

Change the target of a symlink with PHP

How can I change the target of a symlink with PHP? T开发者_如何学运维hanks.


You can delete the existing link using unlink function and recreate the link to the new target using the symlink function.

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

You need to do error checking for each of these.


PHP can execute shell commands using shell_exec or the backtick operator.

Hence:

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

This will be run as the user which is running the Apache server, so you might need to keep that in mind.


To do this atomically, without the risk of deleting the original symlink and failing to create the new one, you should use the ln system command like so:

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

The force flag is necessary to update existing links without failing, and no-dereference avoids the rookie mistake of accidentally putting a link inside the old symlink's target directory.

It's wise to chdir() to the directory that will contain $link if using relative paths.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜