尽管具有写权限,PHP exec() 仍出现写权限错误

尽管具有写权限,PHP exec() 仍出现写权限错误

我在两台 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-datawww-group,然后重新启动网络服务器。

相关内容