将文件触摸为sudo

时间:2016-06-14 15:01:21

标签: php symfony symfony-filesystem

使用[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

2 个答案:

答案 0 :(得分:1)

来自Symfony Filesystem组件:

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的buildin touch()函数的简单包装。如果你需要通过sudo运行提升权限,你必须直接调用它:

shell_exec('sudo touch ' . escapeshellarg($file));

答案 1 :(得分: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/