我有一个PHP脚本,它是我正在编写的更大网站的一部分。我的笔记本电脑上运行了一个小的apache服务器,因此我可以在构建它时测试网站的不同部分。
作为网站的一部分,我希望用户从我在服务器上的一系列文件中选择。当他们选择文件并点击“下载”时,PHP脚本会收到有关要下载哪些文件的说明,将文件压缩到.zip存档中,然后将它们推送到浏览器下载。
<?php
$files = $_POST['files'];
$zipname = 'ncd_data.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE)
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
if (file_exists($zip)) {
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=ncd_data.zip');
header('Content-Length: ' . filesize($zip));
readfile($zip);
exit;
}
?>
经过测试,很明显该脚本无法创建.zip文件。在php脚本中运行exec('whoami')
表明该脚本是在用户apache
下运行的,我继续为apache提供创建文件所需的权限。
通过使用chmod
和chown
,apache现在拥有755个权限,可以访问网站代码所在的'html'文件夹中的所有内容(以及拥有{{1文件夹):
html
[root@callisto var]# ls -l /var/www/html/
total 104
-rwxrwxr-x+ 1 apache root 420 Mar 20 16:54 about.php
-rwxrwxr-x+ 1 apache root 346 Mar 20 15:34 about.php~
drwxrwxr-x+ 2 apache root 4096 Mar 20 15:34 css
-rwxrwxr-x+ 1 apache root 1341 Mar 20 16:54 download.php
-rwxrwxr-x+ 1 apache root 1331 Mar 20 15:34 download.php~
-rwxrwxr-x+ 1 apache root 349 Mar 20 16:54 index.php
-rwxrwxr-x+ 1 apache root 346 Mar 20 15:34 index.php~
drwxrwxr-x+ 2 apache root 4096 Mar 20 15:34 js
drwxrwxr-x+ 2 apache root 12288 Mar 20 15:34 nucleidata
drwxrwxr-x+ 2 apache root 4096 Mar 20 15:58 php
-rwxrwxr-x+ 1 apache root 1332 Mar 20 16:54 plot.php
-rwxrwxr-x+ 1 apache root 1254 Mar 20 15:34 plot.php~
权限以及rwx
使用/var/
的{{1}}权限。尽管如此,还是没有骰子:尽管如此,我还是在php脚本中运行setfacl
命令时遇到了“权限被拒绝”的错误。我知道赋予mkdir
文件夹完全777权限是一个坏主意,但我很难知道还需要做些什么来为PHP提供创建和写入文件所需的权限。
我的设置是Fedora 20笔记本电脑,PHP和Apache分别是他们的最新版本(5.5.10和2.4.7)。提前谢谢。