2011-04-06 105 views
4

我想上傳服務器上的圖像,下面是我在互聯網上找到的腳本,並在本地工作,當我部署代碼和數據庫是給我「未能打開流:權限被拒絕「錯誤。php複製功能,未能打開流:權限被拒絕

<?php 
//define a maxim size for the uploaded images in Kb 
define ("MAX_SIZE","5000"); 

//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension. 
function getExtension($str) { 
     $i = strrpos($str,"."); 
     if (!$i) { return ""; } 
     $l = strlen($str) - $i; 
     $ext = substr($str,$i+1,$l); 
     return $ext; 
} 

//This variable is used as a flag. The value is initialized with 0 (meaning no error found) 
//and it will be changed to 1 if an errro occures. 
//If the error occures the file will not be uploaded. 
$errors=0; 

    //reads the name of the file the user submitted for uploading 
    $image=$_FILES['image']['name']; 

    //if it is not empty 
    if ($image) 
    { 
    //get the original name of the file from the clients machine 
     $filename = stripslashes($_FILES['image']['name']); 
    //get the extension of the file in a lower case format 
     $extension = getExtension($filename); 
     $extension = strtolower($extension); 
    //if it is not a known extension, we will suppose it is an error and will not upload the file, 
    //otherwise we will do more tests 
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png")) 
     { 
     //print error message 
      echo '<h1>Nepoznata vrsta fajla!</h1>'; 
      $errors=1; 
     } 
     else 
     { 
//get the size of the image in bytes 
//$_FILES['image']['tmp_name'] is the temporary filename of the file 
//in which the uploaded file was stored on the server 
$size=filesize($_FILES['image']['tmp_name']); 

//compare the size with the maxim size we defined and print error if bigger 
if ($size > MAX_SIZE*1024) 
{ 
    echo '<h1>To large file!</h1>'; 
    $errors=1; 
} 

//we will give an unique name, for example the time in unix time format 
$image_name=time().'.'.$extension; 
//the new name will be containing the full path where will be stored (images folder) 
$newname="Content/Images/".$image_name; 
//we verify if the image has been uploaded, and print error instead 
//$copied = copy($_FILES['image']['tmp_name'], $newname); 

$copied = copy('$_FILES['image']['tmp_name'], $newname); 

//echo $_FILES['image']['tmp_name'].'<br/>'; 
//echo $_FILES['image']['name']; 

if (!$copied) 
{ 
    echo '<h1>Error occurred!</h1>'; 
    $errors=1; 
}}} 


//If no errors registred, print the success message 
/*if(isset($_POST['Submit']) && !$errors) 
    { 
    echo "<h1>You have successfully uploaded image.</h1>"; 
}*/ 

?> 

我看到一些計算器應答者喜歡answers1answer2,但我不知道該怎麼做?還有其他建議嗎?

謝謝。

+0

你應該張貼** **齊全錯誤消息,不僅存根 – 2011-04-06 20:06:20

+0

您還應該使用'move_uploaded_file()'而不是'copy()'。 – prodigitalson 2011-04-06 20:06:37

+0

我只是寫了一些排序來覆蓋波斯尼亞 – eomeroff 2011-04-06 20:12:18

回答

17

確保保存文件(tmp)的文件夾權限設置爲777。 類型chmod -R 777 path終端

+0

如何做到這一點? – eomeroff 2011-04-06 20:07:33

+0

在您的ftp客戶端(或基於Web的文件管理器)中,您應該能夠右鍵單擊該文件夾並查看屬性或權限的選項。從那裏,777權限僅僅意味着所有者,組和公衆都可以讀取,寫入和執行。請確保只更改'tmp'文件夾中的此權限,因爲您不想授予每個文件夾的寫權限。 – 65Fbef05 2011-04-06 20:14:51

+0

@eomeroff chmod -R 777終端上的路徑 – 2016-02-29 21:12:37

0

你copy命令似乎有語法錯誤:

$copied = copy('$_FILES['image']['tmp_name'], $newname); 
       ^--- extra quote? 

如果你想這樣做

$copied = copy("$_FILES['image']['tmp_name']", $newname); 

它不會反正工作。 PHP解析器不gready,並認爲這是

$_FILES['image'] -> array 
['tmp_name'] -> string 

,並嘗試做

$copied = copy("Array['tmp_name']" ....); 

在任何情況下,你應該使用move_uploaded_file()以處理移動上傳的文件,而不是copy() 。 m_u_l有額外的檢查,以確保在上傳完成和您的腳本嘗試移動文件之間沒有人篡改文件。

+0

所以這行應該去$ copied = copy(「Array ['tmp_name']」,$ newname); ? – eomeroff 2011-04-06 20:10:22

+0

我只是試過了,它不起作用。它說:警告:複製(/tmp/someImg.jpg)[function.copy]:未能打開流:沒有這樣的文件或目錄在... – eomeroff 2011-04-06 20:16:18

+1

他意味着你可以省略第一撇號像這樣'$ copied =複製($ _ FILES ['image'] ['tmp_name'],$ newname);' – 65Fbef05 2011-04-06 20:17:44

1

的文件夾,您試圖複製你的文件必須具有相同的權限作爲你的PHP用戶上。(Apache用戶如果您的服務器是Apache)的

./
drwxrwxr-X根根應用
drwxrwxr-X阿帕奇阿帕奇FilesystemDir

相關問題