免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3565 | 回复: 7
打印 上一主题 下一主题

上传目录权限问题, 求助(第二个问题还未解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-18 14:15 |只看该作者 |倒序浏览
本帖最后由 gecko_H 于 2012-10-09 23:59 编辑

大家好.
我想使用php上传同一个格式(比如.txt)的文件到服务器的某个一目录(linux系统下的一个目录), 然后使用数据库记录文件的存放地址,文件名等.
  1. <?php
  2. if ((($_FILES["file"]["type"] == "image/gif")
  3. || ($_FILES["file"]["type"] == "image/jpeg")
  4. || ($_FILES["file"]["type"] == "image/pjpeg"))
  5. && ($_FILES["file"]["size"] < 20000))
  6.   {
  7.   if ($_FILES["file"]["error"] > 0)
  8.     {
  9.     echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
  10.     }
  11.   else
  12.     {
  13.     echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  14.     echo "Type: " . $_FILES["file"]["type"] . "<br />";
  15.     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  16.     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

  17.     if (file_exists("upload/" . $_FILES["file"]["name"]))
  18.       {
  19.       echo $_FILES["file"]["name"] . " already exists. ";
  20.       }
  21.     else
  22.       {
  23.       move_uploaded_file($_FILES["file"]["tmp_name"],
  24.       "upload/" . $_FILES["file"]["name"]);
  25.       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  26.       }
  27.     }
  28.   }
  29. else
  30.   {
  31.   echo "Invalid file";
  32.   }
  33. ?>
复制代码
问题
1. 上传的目录需要第三方(这里指u,g, o中的others) 有写权限,要不上传不成功. 而我不想文件目录对每个用户开放, 而是指定系统特定用户对目录可写, 其它人不可写. 如何实现?
2. 假如我想上传的多个文件(可能上万个小小文件,同一格式) 打包在一个.tar.gz下, 如何实现上传解压, 并把每个文件名写入数据库?

大家可以指示吗? 如果有现成代码更好(我没写过代码^-^)

第二个问题未解决:
我在网上找到一段代码,这段代码把上传的文档解压到指定的目录. 但如何得到每个文件名及文件内容呢? (通过浏览上传的目录,然后获取文件名及内容?)
我想实现的功能为, 上传后缀为.tar.gz 文档, 读取文档里面的每一个文件名与文件内容, 然后把每个文件名及文件内容保存到数据库, 服务器无需保存上传的tar.gz 文档. 有什么好的办法吗? 能否具体点? 谢谢

    <?php
    $zipFile= 'file.tar.gz';
    $dir = 'myfolder';
    $zp = @gzopen($zipFile, "r");
    $fp = @fopen("temp.tar", "w");
    while(!@gzeof($zp)) {$string = @gzread($zp, 4096); @fwrite($fp, $string, strlen($string));}
    @gzclose($zp);
    @fclose($fp);
    exec('tar xf temp.tar --overwrite --directory='.$dir);
    ?>

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-09-18 14:37 |只看该作者
zlib库解压gz, tar库解包.

论坛徽章:
0
3 [报告]
发表于 2012-09-24 10:22 |只看该作者
第一个问题,*nix是的文件权限分三类,owner、group(跟owner在同一组)、other(除了owner以外的其他用户),

文件权限也就是对这三类权限的设置。

基于你不想给所有人修改目录,那么other权限不能动,可以只读。owner和group都可以实现。

owner,你把这个目录的owner改为httpd服务器的用户名就可以了,一般情况下这是最符合逻辑的。
# chown apache DIR_FOR_UPLOAD
# ls -l
drwxr-xr-x  2 apache root   4096 Sep 24 09:51 test

这样就好了。只有httpd服务器,也就是接受上传文件的进程拥有对此目录的读写执行权限,其他用户则只读。

第二个问题,tar.gz包当然还是用tar gz工具来解压缩,tar包的解压缩,可以参考phars;

gzip包在php已经有相应的模块,参考。http://php.net/manual/en/function.gzopen.php

论坛徽章:
0
4 [报告]
发表于 2012-09-24 12:01 |只看该作者
非常感谢楼上二位.
以前我由于手工添加目录, 需要更改0777才可以上传. 昨晚我在使用php mkdir 函数尝试时,发现新建的目录用户是apache, 才想到利用用户名apache来限制权限.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-09-24 12:08 |只看该作者
本帖最后由 linux_c_py_php 于 2012-09-24 12:08 编辑

你需要检查一下httpd.conf, 看一下配置的运行时用户配置的是什么.

因为apache必须用root启动bind 80, 之后会使用setuid降权到httpd.conf中的用户和组, 而php cgi/fcgi是作为apache子进程运行的, 自然也是降权后的用户与组.

论坛徽章:
0
6 [报告]
发表于 2012-09-25 18:58 |只看该作者
http.conf
User apache
Group apache

chown -R apache:apche your_dir_path/*

论坛徽章:
0
7 [报告]
发表于 2012-10-09 23:56 |只看该作者
第一个问题解决,
第二个问题还没有
我在网上找到一段代码,这段代码把上传的文档解压到指定的目录. 但如何得到每个文件名及文件内容呢? (通过浏览上传的目录,然后获取文件名及内容?)
我想实现的功能为, 上传后缀为.tar.gz 文档, 读取文档里面的每一个文件名与文件内容, 然后把每个文件名及文件内容保存到数据库, 服务器无需保存上传的tar.gz 文档. 有什么好的办法吗? 能否具体点? 谢谢
  1. <?php
  2. $zipFile= 'file.tar.gz';
  3. $dir = 'myfolder';
  4. $zp = @gzopen($zipFile, "r");
  5. $fp = @fopen("temp.tar", "w");
  6. while(!@gzeof($zp)) {$string = @gzread($zp, 4096); @fwrite($fp, $string, strlen($string));}
  7. @gzclose($zp);
  8. @fclose($fp);
  9. exec('tar xf temp.tar --overwrite --directory='.$dir);
  10. ?>
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-10-10 18:17 |只看该作者
路过,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP