我使用的是chmod($path, $mode, bool)
功能,但没有正确设置权限,所以我现在正在尝试:
$fp = fopen($path, 'w');
fclose($fp);
chmod($path, 0750); //changed to add the zero
return true;
问题是,当我使用第一种方法时,它会创建路径ok ...类似于uploads / 2013 / name / 1 / file.pdf(正确),但是permissio0ns不正确。
当我使用第二种方法时,它会创建一个没有扩展名的文件:uploads / 2013 / name / 1(不正确)但权限是正确的......
这是我的代码:
if($_POST["upload"]){
$year = date('Y');
//path to directory
$path = $_SERVER["DOCUMENT_ROOT"] . '/uploads/' . $year . '/' . strtolower(str_replace(' ','',$_POST["username"])) . '/' . $_POST["month"];
//path to file
$target_path = $path . '/' . basename($_FILES['uploadedfile']['name']);
$filename = basename($_FILES['uploadedfile']['name']);
/* $ext = substr($filename, strrpos($filename, '.') + 1); */
if(!is_dir($path) && !file_exists($target_path)) {
mkdir($path, 0750, true);
chmod($path, 0750, true); //changed to add the zero
if(($_FILES["uploadedfile"]["type"] == "application/pdf") && ($_FILES["uploadedfile"]["size"] < 550000)) {
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)){
print "<div class='success'>The file " . "<span class='filename'>" . basename( $_FILES['uploadedfile']['name']) . "</span>" . " has been uploaded</div>";
}
} else {
print "<div class='error'>Wrong file format</div>";
}
} else {
print "<div class='error'>File already exists!</div>";
}
}
答案 0 :(得分:1)
您的umask尝试执行以下操作时遇到问题:
umask(0)
在脚本的开头。
默认的umask是从你的系统配置中获取的,通常是0022,这是每次你在php中使用chmod时应用的,所以带有umask为0022的chmod 0777变为0755
答案 1 :(得分:0)
看起来您的脚本是在Web服务器上下文中执行的。因此,可能是webserver-user无权更改文件权限或设置了系统umask。
由于php的chmod只是系统chmod的包装器,你可以轻松地尝试这个命令作为执行用户。
例如在我的系统上(www-data是apache用户)
$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.10
DISTRIB_CODENAME=quantal
DISTRIB_DESCRIPTION="Ubuntu 12.10"
NAME="Ubuntu"
VERSION="12.10, Quantal Quetzal"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu quantal (12.10)"
VERSION_ID="12.10"
$ sudo su - www-data -s /bin/bash
$ chmod 750 myfile