Warning: move_uploaded_file(activities.png):
failed to open stream:
Permission denied in /var/www/vhosts/default/htdocs/backoffice/db/changelogo.php on line 17
Warning: move_uploaded_file():
Unable to move '/tmp/phpTNQXEi' to 'activities.png' in /var/www/vhosts/default/htdocs/backoffice/db/changelogo.php on line 17
因此,由于此.php脚本的文件权限不正确,我的权限被拒绝。
如何允许文件上传并且不使用SSH(或SFTP)拒绝权限来获取此权限以允许图像上传。
以下是 PHP 脚本以供参考:
<?php
include 'realtydevkit.php';
session_start();
umask(0077);
$name = $_FILES['yourlogo']['name'];
$tmpname = $_FILES['yourlogo']['tmp_name'];
$error = $_FILES['yourlogo']['error'];
ini_set("display_errors", 1);
echo $error;
if ($name) {
$directory = $name;
$userid = $_SESSION['userid'];
$type = "logo";
$file = move_uploaded_file($tmpname, $directory);
if ($file) {
mysql_query("INSERT INTO usercontent
(`userid`, `type`, `url`) VALUES
('$userid', '$type', '$directory')");
echo 'Uploaded';
echo "<img src='".$directory."'/>";
} else {
echo 'There was an error moving the file.';
}
chmod($directory, 0644);
}
?>
这里真正的问题是文件首先没有使用适当的权限编写。我怀疑您没有提前在应用程序中设置umask
:
我会小心使用此设置,因为通过在任何给定的上传文件上设置全局读/写很容易为自己创建安全问题。采取通常的安全预防措施,也许将读/写设置为仅Web用户,而不是公共目录中。 甚至可以设置一个按需运行或按分钟运行的工作,为您移动这些内容以减少安全威胁。
从文档中的评论中,快速操作方法
:<?php
// files will create as -rw-------
umask(0077);
// create a file, eg fopen()
// give access: -rw-r--r--
chmod('/path/to/file', 0644);
?>
文档中的详细信息:
http://php.net/manual/en/function.umask.php
你可以使用内置的PHP chmod()
函数。
这将允许您更改要将文件传输到的文件夹的权限。 一旦文件被移动,您始终可以将其修改回来。
或者,您可以在任何人到达您的网站之前手动 chmod 文件夹。
在处理驻留在服务器中的文件和文件夹的权限时,请小心。 这些文件可能从外部世界访问,并且设置非常开放的权限(例如0777)将允许任何脚本或任何人在该文件夹中创建,删除和更改文件。