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

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

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

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

【问题讨论】:

标签: php folder-permissions


【解决方案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 stackoverflow 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
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2014-11-28
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多