[英]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() 檢查加載的擴展列表可能會有所幫助。
你需要做兩件事:
在move_uploaded_file()
的目標參數中使用絕對文件路徑。
編輯move_uploaded_file
並使用__DIR__.'/'.
附加目標參數__DIR__.'/'.
: if(move_uploaded_file($temp_file, __DIR__.'/'.$targeted_Upload)){ ... }
確保目錄/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.