4
    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);
}


?>
4

2 回答 2

1

这里真正的问题是文件一开始就没有以适当的权限写入。我怀疑您没有umask提前在应用程序中设置您的:

我会小心这个设置,因为通过在任何给定的上传文件上设置全局读/写很容易为自己创建安全问题。采取通常的安全预防措施,也许只对网络用户设置读/写,而不是在公共目录中。甚至可以设置一个按需运行或即时运行的作业,为您移动这些作业以减少您的安全威胁。

从文档中的评论,快速的操作方法:

<?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

于 2012-04-16T17:37:21.907 回答
-1

您可能会使用 PHP 的内置 chmod()函数。

这将允许您更改要将文件传输到的文件夹的权限。移动文件后,您始终可以将其 chmod 恢复。

或者,您可以在任何人访问您的站点之前手动简单地更改文件夹。

在处理驻留在服务器中的文件和文件夹的权限时请小心。这些文件可能可以从外部世界访问,并且设置非常开放的权限(例如 0777)将允许任何脚本或任何人创建、删除和更改该文件夹中的文件。

于 2012-04-16T17:37:34.913 回答