我在两台 Ubuntu 16.04 上运行 LAMP 7.0.28-0ubuntu0.16.04.1。打开文件进行写入的 C 代码是:
#define ERROR_OPENING_FILE -4
fprintf(stderr, "Open output file: /var/www/dropbox/candidates_results.lst.");
if (!(fpOutputFile=fopen("/var/www/dropbox/candidates_results.lst", "w"))){
perror("Error opening output file: ");
throw ERROR_OPENING_FILE;
}
我使用以下命令从 PHP 调用可执行文件。
$program="/var/www/executables/programName ";
$inFile="/var/www/dropbox/candidates.lst";
$str=$program . " -i " . $inFile;
$Result=exec($str, $output, $return);
刷新网页后,我进入 Linux Shell 并输入
cat /var/log/apache2/error.log
这将返回
Open output file: /var/www/dropbox/candidates_results.lst.
Error opening output file: : Permission denied
terminate called after throwing an instance of 'int'
Aborted (core dumped)
当我进入
ls -l /var/www/dropbox/candidates_results.lst
我明白了
-rw-rw-r-- 1 ubuntu www 107 May 20 11:40 /var/www/dropbox/candidates_results.lst
如果我输入
sudo chmod o+w /var/www/dropbox/candidates_results.lst
因此长列表变成
-rw-rw-rw- 1 ubuntu www 107 May 20 11:40 /var/www/dropbox/candidates_results.lst
但是,www-data 是 www 组的成员
$ grep '^www' /etc/group
www-data:x:33:
www:x:1001:ubuntu
因此,www-data 似乎应该具有组权限。我不明白为什么在输入后出现写入权限错误
sudo chmod o-w /var/www/dropbox/candidates_results.lst
答案1
$ grep '^www' /etc/group www-data:x:33: www:x:1001:ubuntu
这清楚地表明www-data
不是 www 组的成员。 只是组ubuntu
成员。www
跑步
sudo usermod -a -G www www-data
添加www-data
到www
-group,然后重新启动网络服务器。