繁体   English   中英

php mkdir() chmod 和权限

[英]php mkdir() chmod and permissions

我正在使用这个基本脚本:

$folderPath = "../path/to/$folder/";
mkdir("$folderPath");

我创建这个目录,然后上传照片到它。 我已经这样做了 4-5 个月了,当我尝试通过网络浏览器查看文件夹的内容时,突然间我开始收到“禁止”错误

目录创建相同,照片仍在上传没有问题,但我无法访问照片

我尝试重写脚本并使用 chmod 来更改权限,但我一点运气都没有

使用以下命令创建所有较旧的文件夹:-w- rwx rx rx

我无法重新创建它

我试过在我的脚本中添加一个 chmod 行:

$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

但我无法重新创建相同的权限,我试图了解 chmod 的工作原理,但我无法弄清楚如何让这个非常基本的功能再次正常工作

尝试查找 HTAccess 文件,其中将提到“Options -Indexes”选项,因为这主要用于不在 Web 浏览器中显示文件夹的内容。 该文件需要按以下方式搜索:-

  • 在文件夹“ root_folder/sales/inventory/$folder/ ”中,其中“ $folder ”在您的代码中提到。
  • 如果未找到,请在文件夹“root_folder/sales/inventory/”中尝试。
  • 如果未找到,请在文件夹“root_folder/sales/”中尝试。
  • 如果未找到,请在文件夹“root_folder/”中尝试。

当您获得 HTAccess 文件中写入的“Options -Indexes”代码时,您可以从那里删除/注释该行代码,或者您也可以在“ $folder ”所需的文件夹中编写另一个 HTAccess 文件,其中代码将是“选项索引”。

同样在PHP页面中,逻辑必须是这样的:-

<?php
$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

// Use of "copy()" / "move_uploaded_file()" function here, using some "$targetFile" variable.
chmod($targetFile, 0755);
?>

当您从“$folder”文件夹中取消链接/删除上传的文件时,这将对您有所帮助。

希望它有帮助。

如果您的 $folder 变量包含一些子目录,您的父目录可能没有被修改为正确的权限。 这是我在租用的 OVH Gentoo 服务器上遇到的问题。

想象一下$folder = '/store1/ally23/shelf42'; 所以你的最终目录结构是../sales/inventory/store1/ally23/shelf42 ,你需要0777 ../sales/inventory/store1/ally23/shelf42 你这样做:

mkdir($folderPath, 0777, true) || chmod($folderPath, 0777);

只有最终目录shelf42被修改为0777 中间目录是使用默认权限创建的(在我的例子中是0744 )。

PHP 的 chmod 命令中没有递归选项,因此您必须遍历中间目录并单独对它们进行 chmod。

如果您在共享环境中,为了安全起见,您可能还想在上传后chown 特别是如果您在虚拟主机以外的用户下运行您的 Web 服务器有权访问(例如:“nobody”与“mysite”。)这在 cPanel 服务器中很常见,FWIW。

简单的 umask 意味着新文件/目录的默认权限:

<?php
 umask(022);
?>

这分别为用户、组和其他人设置了默认权限:

  • 0 - 读、写和执行
  • 1 - 读写
  • 2 - 读取和执行
  • 3 - 只读
  • 4 - 编写和执行
  • 5 - 只写
  • 6 - 只执行
  • 7 - 没有权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM