2012-04-16 132 views
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和CHMOD更改文件权限以允许文件上传

如何使用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); 
} 


?> 

回答

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

+0

非常感谢!但是,这是针对现有文件的,我通过SSH更改了它的权限,但它不影响权限被拒绝。尽管如此,这对rw priveliges的影响将会非常有用。我要尝试把umask和CHMOD放在我现有的php脚本中,看看它是否允许文件上传(图片持续) – 2012-04-16 17:58:14

+0

检查我的原始帖子,看看我做错了什么。我仍然获得拒绝权限的错误。 – 2012-04-16 18:09:52

-1

你可能使用PHP的built inchmod()功能。

这将允许您更改要将文件传输到的文件夹的权限。一旦文件被移动,您可以随时将其恢复。

或者,您可以在任何人到达您的网站之前手动chmod该文件夹。

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

+0

谢谢,请查看PhilWinkle的帖子和我的原创文章以供参考。 – 2012-04-16 18:11:48