iT邦幫忙

0

想請問一下後台上傳檔案(照片)問題!

php
 <form action="" method="post" enctype="multipart/form-data" name="uploadForm" id="uploadForm">
  <p><strong>上傳圖片一:</strong><br />
      <input name="file0" type="file" id="file0" />
  </p>
 
<p><strong>上傳圖片二:</strong><br />
      <input name="file1" type="file" id="file1" />
  </p>
  
  <p><strong>上傳圖片三:</strong><br />
      <input name="file2" type="file" id="file2" />
  </p>
  <p><strong>上傳圖片四:</strong><br />
      <input name="file3" type="file" id="file3" />
  </p>
  <p>
    <input name="Submit" type="submit" value="開始上傳"/>
    <input type="reset" name="button" id="button" value="清除" />
  </p>
</form>

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   
// 上傳檔將存入此路徑裡的 rev-slider 資料夾

$upload_dir = "/rev-slider";
// 上傳檔總數
$total_uploads = 4;
// 上傳檔大小限制,此處限制為400KB
$size_bytes =400 * 1024;
// 副檔名限制
$limitedext = array(".jpg");
echo "<h3>上傳結果</h3>";
// 用迴圈讀取上傳欄位資料
for ($i = 0; $i < $total_uploads; $i++) {
   $new_file = $_FILES['file'.$i];
   // 讀取上傳檔名
   $file_name = $new_file['name'];
   $name=explode('.',$file_name);
   
   // 存入暫存區的檔名
   $file_tmp = $new_file['tmp_name'];
   // 檔案大小
   $file_size = $new_file['size'];
   
   // 判斷欄位是否指定上傳檔案…
   if (!is_uploaded_file($file_tmp)) {
		// 沒有上傳檔,顯示訊息。
	  echo "欄位 $i: 沒有選取上傳檔案。<br />";
   }else{
	// 若有上傳檔,則取出該檔案的副檔名
	 $ext = strrchr($file_name,'.');
	 // 判斷副檔名是否符合預期
	 if (!in_array(strtolower($ext),$limitedext)) {
		// 不符合預期,顯示錯誤訊息。
		echo "欄位 $i: ($file_name) 的檔案副檔名有誤(只允許JPE檔) <br />";
	 }else{
		// 檢查檔案是否太大
	   if ($file_size > $size_bytes){
		   echo "欄位 $i: ($file_name) 無法上傳,請檢查檔案是否小於 ". $size_bytes / 1024 ." KB。<br />";
	   }else{
		   if (move_uploaded_file($file_tmp,$upload_dir.$file_name)) {
			   echo "欄位 $i: ($file_name) 上傳成功!<br />";
		   }else{
				echo "欄位 $i: 無法上傳。<br />";
		 }
	   }
	 }
   }
  }
}

?>

在本地預覽試上傳時不會出現錯誤,但是上傳到網路時就會變成無法上傳
我後來有把FTP資料夾權限改成777,可是一樣是無法上傳
https://ithelp.ithome.com.tw/upload/images/20210107/20120427n7X2akZZfJ.png
後來我想到我的後台是放在原本網站下面的資料夾,會不會是路徑的問題?
我的後台放在紅筆畫的那個資料夾,可是我現在要上傳到藍筆畫的資料夾那邊

請指點一下,謝謝!
https://ithelp.ithome.com.tw/upload/images/20210107/20120427z4lFI84mml.png

1 個回答

3
㊣浩瀚星空㊣
iT邦超人 1 級 ‧ 2021-01-08 09:15:17
最佳解答

你要注意一件事,網路路徑跟主機路徑是不同的。
如果假設你的網路 root路徑是放在 /www 內。

則網路路徑的 /rev-slider
是實體位置是在 /www//rev-slider 沒錯。

可是檔案上傳是依主機路徑的。
也就是說,實際你上傳的路徑是會在 /rev-slider 這裏。

一般來說,會搭配

$rootpath = $dirname(__FILE__);

來獲得當前主機路徑位置處理。

我用成功了!!我也了解啦~~非常感謝你喔!

我要發表回答

立即登入回答