2014-10-01 114 views
1

因此,我想了解如何使用HTML和PHP將文件上傳到Web服務器的簡單教程/示例。有沒有錯誤,一切似乎工作正常,但該文件不保存在Web服務器上...文件沒有被上傳到服務器使用PHP腳本

我正在使用Amazon EC2實例。 編輯: 我現在已經在我的回聲輸出許可警告/錯誤,如下圖所示,即使是在運行目錄CHMOD 777後

的index.html

<form enctype="multipart/form-data" action="test.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> 
Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

test.php的

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png","tiff"); 
$temp = explode(".", $_FILES["uploadedfile"]["name"]); 
$extension = end($temp); 
echo "Upload attempt...: " . $_FILES["uploadedfile"]["name"] . "<br>"; 
if ((($_FILES["uploadedfile"]["type"] == "image/gif") 
    || ($_FILES["uploadedfile"]["type"] == "image/jpeg") 
    || ($_FILES["uploadedfile"]["type"] == "image/tiff") 
    || ($_FILES["uploadedfile"]["type"] == "image/jpg") 
    || ($_FILES["uploadedfile"]["type"] == "image/pjpeg") 
    || ($_FILES["uploadedfile"]["type"] == "image/x-png") 
    || ($_FILES["uploadedfile"]["type"] == "image/png")) 
    && ($_FILES["uploadedfile"]["size"] < 20000000) 
    && in_array($extension, $allowedExts)) { 

    if ($_FILES["uploadedfile"]["error"] > 0) { 
    echo "Return Code: " . $_FILES["uploadedfile"]["error"] . "<br>"; 
    } else { 
    echo "Upload: " . $_FILES["uploadedfile"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["uploadedfile"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["uploadedfile"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["uploadedfile"]["tmp_name"] . "<br>"; 
    if (file_exists("~/upload/" . $_FILES["uploadedfile"]["name"])) { 
     echo $_FILES["uploadedfile"]["name"] . " already exists. "; 
    } else { 
     move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], 
         "../upload/" . $_FILES["uploadedfile"]["name"]); 
     echo "Stored in: " . "../upload/" . $_FILES["uploadedfile"]["name"]; 
    } 
    } 
} else { 
    echo "Invalid file"; 
} 
?> 

echo output

Upload attempt...: storeflyer.jpg 
Upload: storeflyer.jpg 
Type: image/jpeg 
Size: 35.1708984375 kB 
Temp file: /tmp/phpqq6J4C 
Warning: move_uploaded_file(../upload/storeflyer.jpg): failed to open stream: Permission denied in ../test.php on line 29 Warning: move_uploaded_file(): Unable to move '/tmp/phpqq6J4C' to '../upload/storeflyer.jpg' in ../test.php on line 29 Stored in: ../upload/storeflyer.jpg 
+0

檢查move_uploaded_file的'返回值()' – 2014-10-01 23:53:46

回答

2

您正在使用~/upload/,並將波形和斜槓用作路徑。

您應該使用upload/作爲相對路徑來刪除所有的波浪線和斜線。

或者,如sonic720在評論中所述:/var/www/upload這將因服務器而異,因此您的可能是類似​​這是另一種選擇。

如果從服務器的根目錄執行腳本,則使用upload/

如果從一個子文件夾下執行的,則可能需要調整它,例如:../upload/

同時檢查文件夾權限。 07550777,但0755更安全使用。

  • 關於:__DIR__ & BASE_PATH

諮詢:http://php.net/manual/en/function.dirname.php


編輯:

我發現別的東西echo "Return Code: " . $_FILES["file"]["error"] . "<br>";應該讀作echo "Return Code: " . $_FILES["uploadedfile"]["error"] . "<br>";


添加error reporting到您的文件(S),這將在生產測試幫助的頂部。

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

+1

我第二這一點。 「〜」字符反映了Web用戶的主目錄,應該在PHP腳本中避免。通常情況下,Web用戶的主目錄應該是/ var/www /或類似的地方,你不能寫文件。 使用'__DIR__'併爲您的應用程序設置BASE_PATH。查找一些wordpress代碼,你可以很容易地搜索ABSPATH,這是同樣的事情。 – Ligemer 2014-10-02 00:01:28

+1

@ sonic720這是一個很好的觀點。 +1 – 2014-10-02 00:02:31

+0

@ Fred-ii-感謝您的回覆,所以我將路徑更改爲'../ upload /',並在其上運行了'chmod 777'。但我現在得到一個'未能打開流:權限被拒絕在../ test.php'中,並且我在該文件夾上運行了'chmod 777'以及... – Ray 2014-10-02 00:34:17

相關問題