临时使用 PHP 将文件夹权限更改为 777

Posted

技术标签:

【中文标题】临时使用 PHP 将文件夹权限更改为 777【英文标题】:Change folder permission to 777 using PHP temporarily 【发布时间】:2013-03-05 08:26:51 【问题描述】:

我的服务器上有一个拥有 755 权限的 Video 文件夹。问题是:当有人上传视频文件时,由于权限错误,无法上传到该文件夹​​。

如果我将权限更改为 777,则可以上传视频。但出于安全原因,我不想允许文件夹权限为 777。

php有什么办法可以在上传视频的时候临时把权限改成777?

【问题讨论】:

请关注***.com/questions/2958602/… 【参考方案1】:

PHP 为任务提供了一个函数,chmod()

尝试将指定文件的模式更改为模式中给定的模式。

你可以把它放在if语句中,如果返回false,你可以跳过上传文件部分。


用法会是这样的

if( chmod($path, 0777) ) 
    // more code
    chmod($path, 0755);

else
    echo "Couldn't do it.";

如chmod function manual 中所述,$mode 必须采用八进制格式 - 带有前导零,即 chmod($path, 0777)

【讨论】:

if 子句不是已经将权限更改为0777 吗? @AAGD 是的。但问题是:“在上传视频时,PHP 中有什么方法可以临时将权限更改为 777”? 检查文件权限,使用: if ( substr(sprintf('%o', fileperms($path)), -4) == '0777' ) chmod($path, 0755 ); 【参考方案2】:

有一种方法(PHP 提供chmod 函数)但由于PHP 不是文件夹的所有者,您将无法更改权限。而且我认为您正在解决错误的问题。将 webserver 和 PHP 添加到同一组中,并在文件夹中添加 775。

【讨论】:

因为 PHP 显然不在文件夹所有者的组中:) @MaximKrizhanovsky PHP 用户?请您详细说明一下。 @ElberCM PHP 可以以多种方式运行,包括作为 Web 服务器进程的一部分,或作为 CGI 程序。大多数情况下,PHP 与 Web 服务器在同一用户下。然而,这不是必需的。查看this *** answer【参考方案3】:

您必须为上传初始化配置,如下所示:

$config['remove_spaces'] = FALSE;
$config['upload_path'] = $path;
$this->upload->initialize($config);
$this->load->library('upload', $config);   

【讨论】:

这与codeigniter有关,而不是他的工作。【参考方案4】:

你可以使用chmod()函数。

欲了解更多信息,请尝试here

【讨论】:

【参考方案5】:

警告:您无法撤消由以下脚本更改的文件权限。谨慎行事。

重要提示:仅当您记得在使用后立即将其删除时,才应使用此代码。如上所述,使用它可能会使您的网站处于不安全状态。


//replace dirname(__FILE__) with desired folder.
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) 
  if (is_dir($dir)) 
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) 
       echo "

Made writable: " . $dir . "

"; if (is_dir($dir) && $handle = opendir($dir)) while (false !== ($file = readdir($handle))) if (!in_array($file, $nomask) && $file[0] != '.') if (is_dir("$dir/$file")) // Recurse into subdirectories file_fix_directory("$dir/$file", $nomask); else $filename = "$dir/$file"; // Try to make each file world writable. if (@chmod($filename, 0666)) echo "

Made writable: " . $filename . "

"; closedir($handle);

或者你可以使用终端来做这个

chmod -R 755 public_html/test

【讨论】:

以上是关于临时使用 PHP 将文件夹权限更改为 777的主要内容,如果未能解决你的问题,请参考以下文章

PHP move_uploaded_file 权限被拒绝

nfsnobody 用户权限

git 部署项目 - 文件权限 - (chmod)

Ubuntu上的Appium桌面问题

Ubuntu中lampp的文件权限

安装wordpress出现的问题