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

7
我在服务器上有一个视频文件夹,它的权限设置为755。问题是:当有人试图上传视频文件时,因为权限错误,无法将其上传到该文件夹中。
如果我将权限更改为777,则可以上传视频。但出于安全原因,我不想允许文件夹权限设置为777。
在上传视频时,是否有一种PHP的方式可以临时更改权限为777?

1
请查看以下网址:http://stackoverflow.com/questions/2958602/still-dont-understand-file-upload-folder-permissions - Wasim
5个回答

24

PHP提供了一个名为chmod()的函数来完成此任务。

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

您可以将其放在一个if语句中,如果它返回false,则可以跳过上传文件部分。


用法如下:

if( chmod($path, 0777) ) {
    // more code
    chmod($path, 0755);
}
else
    echo "Couldn't do it.";

chmod函数手册所述,$mode必须采用八进制格式,前导零不可省略,例如:chmod($path, 0777)


1
那个 if 语句不会已经将权限更改为 0777 吗? - AAGD
1
@AAGD 是的。但问题是:“在上传视频时,PHP是否有临时更改权限为777的方法?” - hjpotter92
要检查文件权限,请使用以下代码: if ( substr(sprintf('%o', fileperms($path)), -4) == '0777' ) { chmod($path, 0755); } - Amr

4

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


因为PHP显然不在文件夹所有者的组中 :) - Maxim Krizhanovsky
@MaximKrizhanovsky,你是PHP用户吗?能否详细说明一下? - Elber CM
2
@ElberCM PHP可以以多种方式运行,包括作为Web服务器进程的一部分或作为CGI程序。通常情况下,PHP与Web服务器在同一个用户下运行。但这并非必须如此。请查看此stackoverflow答案 - Maxim Krizhanovsky

2
您需要初始化上传的配置,类似这样:

您需要初始化上传的配置,类似这样:

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

1
与CodeIgniter有关的内容,而不是他正在处理的内容。 - Exploit

1
你可以使用chmod()函数。
欲了解更多信息,请点击这里

0

警告:下面的脚本更改的文件权限无法撤销,请极度谨慎操作。

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


//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 "<p>Made writable: " . $dir . "</p>";
     }
  }
  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 "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

或者你可以使用终端来完成这个操作

chmod -R 755 public_html/test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接