WIN下我不说了
UNIX下:
系统默认是以nobody:nobody身份创建的
比如要在当前目录下test目录下,创建一个test目录,并在./test/test下建立一个abc的文件,向其中写入hello world!!字串.(前提:父目录对其他用户必须有读写和执行权限.比如777)
-------------------------
<?
$dir="test/test";
mkdir($dir,0777);
$fp=fopen("$dir/abc",a);
fputs($fp,"hello world!!");
fclose($fp);
?>
--------------------------
PHP4.3.2 + APACHE2.0.47 下正常运行.

解决方案 »

  1.   

    因为你的php程序在apache上运行,其必定是系统用户权限,你建立的目录也具有相应的权限,所以我想在你建立目录之后应该需要执行一个shell来改变你建立的这个目录的权限
      

  2.   

    to: NetSniffer(扑克)
    目录我能正常建立。
    但是目录的所有者却是一不知道奇怪名字(叫:99)to: hcfyxy(无名) ( ) 
    我建立目录时,会随后用
    @chmod($path,0777)改变权限的。
    权限都没有问题,问题是目录的所有者不是我希望的。
      

  3.   

    你用
    mkdir($path, 0777);
    chown($path, 'username');
      

  4.   

    不过有些奇怪,既然你用mkdir建立的目录owner uid是99,那么你的进程uid也应该是99,为什么后来会对目录无法操作呢?你查查是不是其他地方有错吧
      

  5.   

    to: changx(changxing)chown($path, 'username');
    这样执行就提示我没有权限了。另外owner uid不是99是另外一个。可是建立的目录的uid是99
      

  6.   

    看看你的进程uid是什么吧<?php
    $euid = posix_geteuid();
    $suid = getmyuid();print "euid: $euid <br> script uid: $suid";
    ?>服务器是apache么?
      

  7.   

    to: changx(changxing)结果是这样的,服务器是apache。您看有什么办法解决,谢谢。euid: 99 
    script uid: 32003
      

  8.   

    该服务器大概有多少个用户?
    如果没有特殊指定的话,新建文件和新建目录的所有者应该是 www用Web方式建立的文件或目录的所有者是Web用户。
      

  9.   

    to: Mistruster(弱智d)服务器的用户数量我不知道。
    目录建立是通过http:访问,然后建立的。
    就出现了这样的问题。
      

  10.   

    这个算是正常的,所有web访问用户都是这个用户名。
      

  11.   

    [%Apache%] /conf/httpd.conf...
    User www
      

  12.   

    to: Mistruster(弱智d) 
    我想知道怎么才能避免这样。因为这样我没有办法继续下面的操作。
      

  13.   

    建立完目录后使用chmod重新更改权限。
    chmod($path, 0777);因为mkdir()函数在某些情况或系统下不能创建权限。
      

  14.   

    to: wfqn() 
    不是权限的问题,请看清问题。
      

  15.   

    没在linux下试过,把php换成非安全模式试试?
      

  16.   

    to: feel8(准备早起的鸟) 
    现在就是非安全模式了。
      

  17.   

    不是告诉你了吗,在Apache的配置文件里改。
    httpd.conf里找到 User 改成你希望的用户;
      

  18.   

    to: Mistruster(弱智d)User xxxx
    Group xxxx
    设置正确,没有一个叫99的组或用户
      

  19.   

    to: Mistruster(弱智d) 
    新建文件和建目录一样。
      

  20.   

    装一个cgi模式的PHP,然后让php用root身份执行,(安全方面要做一些限制)
    建立目录时用exec("mkdir -p $dir");
    绝对可以
      

  21.   

    我也试了一下,按照double2(double2) 说的,将User xxxx  Group xxxx设置成mkdir程序所属的用户和组就可以了。
    可是有一个问题,我是多个用户共用这一个Apache服务器,采用虚拟主机对各用户发布,如果我把User/Group改为a/a用户/组,那b/b用户/组中执行的mkdir程序所创建的目录及文件也都属于a/a用户/组,且无法用chown修改为b用户。即便b用户是root也无法修改。如何解决?
      

  22.   

    to huoshelf(Allul):
    把User/Group改写到<VirtulHost>里不就行了.
      

  23.   

    to double2(double2):
    把你的httpd.conf短信发给我,帮你看看。
      

  24.   

    呵呵,我给忘了,总是拿我们改过的apache来想这个问题。如果你的虚拟主机数量不多,用Minstruster的办法就可以了
    如果你的虚拟主机有几百,那你就要考虑suExec或者自己改apache
      

  25.   

    to: changx(changxing) 
    什么是“Minstruster的办法就可以了”?谢谢
      

  26.   

    to Mistruster(弱智d) 
    你说的方法我先前试过的,可是好像根本没有用,不知道是不是因为我写的不对。
    如下,虚拟主机上设的user/group根本没用,mkdir后还是main用户的。User main
    Group main<VirtualHost 192.168.0.3>
        ServerAdmin [email protected]
        DocumentRoot /home/aaa/html
        ServerName 
        User aaa
        Group aaa
        ErrorLog /home/aaa/logs/error_log
        CustomLog /home/aaa/logs/access_log common
    </VirtualHost><VirtualHost 192.168.0.4>
        ServerAdmin [email protected]
        DocumentRoot /home/bbb/html
        ServerName 
        User bbb
        Group bbb
        ErrorLog /home/bbb/logs/error_log
        CustomLog /home/bbb/logs/access_log common
    </VirtualHost>
      

  27.   

    <?
    $dir="test";
    mkdir($dir,0777);
    $fp=fopen("$dir/abc",a);
    fputs($fp,"hello world!!");
    fclose($fp);
    ?>我在linux7下测试后,目录所有都为nobody:nobody