使用[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
答案 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/