2012-04-16 67 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