临时使用 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的主要内容,如果未能解决你的问题,请参考以下文章