簡體   English   中英

文件上傳在 Apache 服務器上的 PHP 中不起作用

[英]File upload does not work in PHP on Apache Server

我正在嘗試將圖像文件上傳到在 Raspberry 上運行的 Web 服務器上。 圖像應通過表單上傳並轉發到 PHP 腳本。 我檢查了文件夾是否設置為正確的權限,看起來沒問題。 代碼似乎運行沒有問題。

這是表格:

<form action="./php/fileUpload.php" method="POST" enctype="multipart/form-data"> 
   Wähle eine Datei aus: <br> <input name="datei" type="file" />
   <input type="submit" value="Sende Datei" />
</form>

在此表單中選擇的文件將發送到此腳本:

<?php
$upload_dir = "/uploads/";
$file_extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));
$file_filename = pathinfo($_FILES['datei']['name'], PATHINFO_FILENAME);
$targeted_Upload = $upload_dir . $file_filename . "." . $file_extension;
$temp_file = $_FILES["datei"]["tmp_name"];

var_dump($upload_dir);
echo "<br>";
var_dump($targeted_Upload);
echo "<br>";
var_dump($file_filename);
echo "<br>";
var_dump($file_extension);
echo "<br>";
var_dump($temp_file);
echo "<br>";

if(file_exists($targeted_Upload)){
    echo "file exists... renaming";
    echo "<br>";
    $newName = $upload_dir . $file_filename;
    do{
        $newName = $newName . "_1";
    }while(file_exists(($newName . "." . $file_extension)));

    $targeted_Upload = $newName . "." . $file_extension;

    echo "file was renamed to " . $targeted_Upload;
    echo "<br>";
    var_dump($targeted_Upload);
    echo "<br>";
}

if ($_FILES["datei"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
}

echo"$targeted_Upload";
echo "<br>";

if(move_uploaded_file($temp_file, $targeted_Upload)){
    echo "<br>File was Uploaded" . "<a href=\"$targeted_Upload\">$targeted_Upload</a>";
}else{
    echo "I have no clue what happened";
}
?>

當我執行腳本時,頁面上的輸出如下

string(9) "/uploads/"
string(16) "/uploads/ken.jpg"
string(3) "ken"
string(3) "jpg"
string(14) "/tmp/phpv0JAu1"
/uploads/ken.jpg
I have no clue what happened

有誰知道我做錯了什么或出了什么問題?

我認為您的上傳路徑有問題。 如果 PHP 腳本和上傳在同一個目錄中,那么你應該使用 dot[.] 作為當前目錄

$upload_dir = "./uploads/"; 

您可以檢查上傳錯誤。

 if(move_uploaded_file($temp_file, $targeted_Upload)){
    echo "<br>File was Uploaded" . "<a href=\"$targeted_Upload\">$targeted_Upload</a>";
}else{
    echo "Not uploaded because of error #".$_FILES["datei"]["error"];
}

UPLOAD_ERR_INI_SIZE = 值:1; 上傳的文件超過了 php.ini 中的 upload_max_filesize 指令。

UPLOAD_ERR_FORM_SIZE = 值:2; 上傳的文件超過了在 HTML 表單中指定的 MAX_FILE_SIZE 指令。

UPLOAD_ERR_PARTIAL = 值:3; 上傳的文件只是部分上傳。

UPLOAD_ERR_NO_FILE = 值:4; 沒有上傳文件。

UPLOAD_ERR_NO_TMP_DIR = 值:6; 缺少臨時文件夾。 在 PHP 5.0.3 中引入。

UPLOAD_ERR_CANT_WRITE = 值:7; 無法將文件寫入磁盤。 在 PHP 5.1.0 中引入。

UPLOAD_ERR_EXTENSION = 值:8; PHP 擴展停止了文件上傳。 PHP 沒有提供確定哪個擴展名導致文件上傳停止的方法; 使用 phpinfo() 檢查加載的擴展列表可能會有所幫助。

你需要做兩件事:

  1. move_uploaded_file()的目標參數中使用絕對文件路徑。

    編輯move_uploaded_file並使用__DIR__.'/'.附加目標參數__DIR__.'/'. : if(move_uploaded_file($temp_file, __DIR__.'/'.$targeted_Upload)){ ... }

  2. 確保目錄/uploads已創建,並且 Web 服務器用戶具有寫入權限。

文件將存儲在臨時位置 - 提供上傳位置的完整路徑。

if (move_uploaded_file($temp_file, $_SERVER['DOCUMENT_ROOT']/project_name/$targeted_Upload)) {
    echo "Uploaded";
} else {
   echo "File was not uploaded";
}

我對目標文件夾有權限問題(如果路徑正確)。如果有人偶然遇到此問題,請在終端中使用以下命令授予文件夾權限。

sudo chmod 777 /path/to/upload/folder

請注意我使用的是 Ubuntu 18.04LTS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM