【问题标题】:PHP - mkdir with wrong ownerPHP - 拥有错误所有者的 mkdir
【发布时间】:2013-12-24 22:48:45
【问题描述】:

我有一个简单的 PHP 脚本,它创建一个文件夹,然后将某些文件复制到其中。该文件夹(和复制的文件)拥有所有 755 权限。问题是,它将用户设置为 Apache。 现在我无法通过 FTP 删除或更改权限。我只能在我的 DirectAdmin 中“重置所有权”。在那里我可以看到用户从“Apache”变为“matthdc58”。

如何让 PHP 以“matthdc58”作为用户创建一个文件夹?我试过chown() - 失败了:

Warning: chown() [function.chown]: Operation not permitted in /home/matthdc58/domains/hiddendomain.com/public_html/Home.php on line 78

Warning: chown() [function.chown]: Operation not permitted in /home/matthdc58/domains/hiddendomain.com/public_html/Home.php on line 79

Warning: chown() [function.chown]: Operation not permitted in /home/matthdc58/domains/hiddendomain.com/public_html/Home.php on line 80

Warning: Cannot modify header information - headers already sent by (output started at /home/matthdc58/domains/hiddendomain.com/public_html/Home.php:78) in /home/matthdc58/domains/hiddendomain.com/public_html/Home.php on line 90

我也试过(似乎解决了别人的问题)php_flag safe_mode off 在我的 .htaccess 中,没有成功。


我的整个 PHP 脚本:

$dirtocreate = 'userdata/'.$_SESSION['uname'];
$oldumask = umask(0); 
mkdir($dirtocreate, 0755);
umask($oldumask);

copy('img/100x100.png', $dirtocreate.'/100x100.png');   
copy('img/64x64.png', $dirtocreate.'/64x64.png');   

//Verify correct owner
chown($dirtocreate, 'matthdc58');
chown($dirtocreate.'/100x100.png', 'matthdc58');
chown($dirtocreate.'/64x64.png', 'matthdc58');

//Verify correct permissions, just to be sure               
chmod($dirtocreate,0755);
chmod($dirtocreate.'/100x100.png',0755);        
chmod($dirtocreate.'/64x64.png',0755);

所以,澄清一下:

  • 我的 PHP 脚本将新文件夹的所有者设置为“Apache”。
  • PHP 脚本无法将所有者更改为“matthdc58”。
  • 现在,我无法编辑 该文件夹通过 FTP,因为所有者是“Apache”。
  • 我只能通过 DirectAdmin 使用“恢复所有权”来恢复所有权 按钮。

【问题讨论】:

    标签: php .htaccess mkdir ownership chown


    【解决方案1】:

    请检查您是否已将目录:/home/matthdc58/domains/hiddendomain.com/public_html/ 更改为您的用户名。 :)

    【讨论】:

    • DirectAdmin 说 /public_html/ 有一个 UID 和一个 GID 设置为“matthdc58”,如果这就是你的意思。 (UID 是所有者,对吧?)
    • 是的。它说 chown() 是不允许的。你在VPS上?如果是这样,我可以肯定地告诉你如何解决这个问题。
    • 我不这么认为。我使用来自Versio 的虚拟主机,但我真的很难找到它。 (有什么办法知道吗?)
    • 从表面上看,您没有服务器根访问权限。我不认为你将能够使用 chown() - 尝试不使用它,也许它无论如何都会给你 chown 。 :)
    • 啊,对。 755 作品。但不确定为什么 chown() 不起作用,请联系您的主机。 :) 让他们给你许可。
    【解决方案2】:

    原来与我使用的 PHP 版本有关。
    在我的主机 Versio 的推荐下,我通过添加更改了 PHP 的版本

    <FilesMatch "\.php$">
    AddHandler x-httpd-php54 .php
    </FilesMatch>
    

    到我的 .htaccess 文件。


    我认为这与其他人无关,因为这与权利有关,但您可以随时尝试。
    再次,感谢@LeSamAdmin 帮助我!

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 2011-02-03
      • 2013-05-08
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多