【问题标题】:mkdir() permission unalteredmkdir() 权限不变
【发布时间】:2015-11-01 16:45:55
【问题描述】:

我正在使用 php 创建图像上传功能。

我正在使用 vagrant 在 Windows 上工作,一切正常。现在,我搬到了 Ubuntu(仍在使用 vagrant),脚本不再工作了。

我在上传图片之前创建了两个文件夹,目前只创建了第一个文件夹。

$folder_name = Config::get('PATH_IMAGES') . Session::get('user_id') . '/';
$profile_folder = $folder_name . 'profile/';

// create a folder for the user's images
if (!(is_dir($folder_name) || is_writable($folder_name))) {
    mkdir($folder_name, 0777);
}           

if (!(is_dir($profile_folder) || is_writable($profile_folder))) {
    mkdir($profile_folder, 0777, true);
} 

这将创建一个具有以下权限的文件夹:

drwxrwxr-x 2 user user 4096 Aug 9 21.33 folder_name

不是drwxrwxrwx!

现在,如果我手动更改权限 (chmod -R 777 folder_name),我会得到以下信息:

drwxrwxrwx 2 user user 4096 Aug 9 21.33 folder_name

再次运行我的脚本,将创建第二个目录。用第二个目录重复这个过程,我终于可以上传图片了。

到目前为止我尝试了什么:

$folder_name = Config::get('PATH_IMAGES') . Session::get('user_id') . '/';
$profile_folder = $folder_name . 'profile/';

// create a folder for the user's images
if (!(is_dir($folder_name) || is_writable($folder_name))) {
    umask(0); <------
    mkdir($folder_name, 0777);
}           

if (!(is_dir($profile_folder) || is_writable($profile_folder))) {
    umask(0); <------
    mkdir($profile_folder, 0777, true);
}

这并没有解决问题。运行 (umask();) 返回 18。
在 mkdir() 之后运行 chmod() 也没有帮助。

我的 php 用户是 www-data。
我的 apache 用户是“用户”。
没有错误消息。

我不知道在哪里寻找解决方案。我会非常感谢任何帮助。

编辑:

将所有内容放在一个语句中也不能解决问题。

    $folder_name = Config::get('PATH_IMAGES') . Session::get('user_id') . '/profile/';

    // create a folder for the user's images            
   if (!(is_dir($folder_name) || is_writable($folder_name))) {
        mkdir($folder_name, 0777, true);            
   }

【问题讨论】:

  • 当您使用chmod() 时,它是否返回true?检查是否存在,如果存在,请检查 FTP 或 SSH 中的文件夹权限。
  • 看起来 mkdir() 有时不喜欢尾部斜杠 bugs.php.net/bug.php?id=42739 我会尝试不使用它们
  • @JuanchoRamone 安全模式已在 PHP 5.4 中移除
  • @kringeltorte 在第一个 if 子句后添加die(var_dump(chmod($folder_name, 0777))); ,它将停止脚本执行并输出 chmod() 的返回值。
  • 能否尝试将 PHP 的用户更改为与 Apache 相同的用户,然后重试?

标签: php apache permissions mkdir


【解决方案1】:

mkdir() 之后使用chmod($folder,0755)(或0777)

【讨论】:

  • 谢谢!我当时就试过了。我实际上从来没有找到解决方案,我认为这是一个非常奇怪的东西,与代码没有直接关系。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2011-09-27
  • 2016-08-24
  • 2013-07-01
相关资源
最近更新 更多