2

使用 [Symfony 的文件系统][1] 时,如何以 sudo 方式触摸文件?

到目前为止,我有:

$fs = new Filesystem();
$confFile = sprintf('/etc/apache2/sites-available/%s.conf', $input->getArgument('name'));
$fs->touch($confFile);

但是此代码失败并出现错误:Permission denied.

[1]:http ://symfony.com/doc/current/components/filesystem/introduction.html

4

2 回答 2

1

从 Symfony 文件系统组件:

public function touch($files, $time = null, $atime = null)
{
    foreach ($this->toIterator($files) as $file) {
        $touch = $time ? @touch($file, $time, $atime) : @touch($file);
        if (true !== $touch) {
            throw new IOException(sprintf('Failed to touch "%s".', $file), 0, null, $file);
        }
    }
}

如您所见,该touch()方法只是 PHP 内置touch()函数的简单包装。如果您需要通过 sudo 以提升的权限运行 touch,则必须直接调用它:

shell_exec('sudo touch ' . escapeshellarg($file));
于 2016-06-14T15:46:23.857 回答
0

您需要更改权限/etc/apache2/sites-available/以向 apache 用户添加写访问权限

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" /etc/apache2/sites-available/
于 2016-06-14T15:09:03.217 回答