ก่อนหน้านี้ฉันไม่ได้สนใจเรื่องการอัพโหลดไฟล์มากนัก เมื่อวานฉันทำแบบง่ายๆ แต่พบว่ามีปัญหาค่อนข้างมาก
รหัสโปรแกรมตอนต้นจะเป็นดังนี้:
uploadimg.php
<?php
//พิจารณาว่าเป็นอินเทอร์เฟซการอัปโหลดหรืออินเทอร์เฟซการใช้งาน หากเป็นอินเทอร์เฟซการอัปโหลด ให้แสดงหน้า HTML ต่อไปนี้
if(!$_POST['UploadAction']):
?>
<html>
<หัว>
<title></title>
</หัว>
<body><table><center>
<form enctype="multipart/form-data" name="SubmitForm" action="" method="post">
<input type="hidden" name="UploadAction" value="1">
<tr><td><input name="UploadFile" type="file" size="30"></td></tr>
<tr><td><input type="submit" name="submit" value="Upload"></td>
<td><input type="reset" name="reset" value="Reset"></td></tr>
</แบบฟอร์ม>
</ศูนย์></ตาราง></ร่างกาย>
</html>
<?php
//หากเป็นหน้าการใช้งาน ให้แสดงหน้า HTML ต่อไปนี้และเปิดใช้งานสคริปต์ PHP
อื่น:
?>
<html>
<หัว>
<title></title>
</หัว>
<ร่างกาย>
<?php
//www.knowsky.com เริ่มต้นสถานะของ UploadAction
$UploadAction=0;
$UploadFile=$_POST['UploadFile'];
if(($UploadFile!="none") && ($UploadFile!=""))
-
$UploadPath=$_SERVER['DOCUMENT_ROOT']"\";
if (!is_writeable($UploadPath))
-
echo "ไดเรกทอรี $UploadPath ไม่สามารถเขียนได้!";
-
อื่น
-
echo "ไดเรกทอรี $UploadPath สามารถเขียนได้!";
}
$FileName=$UploadFile_name;
if($UploadFile_size<1024)
-
$FileSize=(string)$UploadFile_size"byte";
-
elseif($อัพโหลดไฟล์_ขนาด<(1024*1024))
-
$FileSize=number_format((double)($UploadFile_size/1024),1).."KB";
-
อื่น
-
$FileSize=number_format((double)($UploadFile_size/(1024*1024)),1).."KB";
-
if(!file_exists($UploadPath.$FileName))
-
ถ้า(move_uploaded_file($UploadFile,$UploadPath.$FileName))
-
echo "อัพโหลดไฟล์ $UploadFile_name ($FileSize) เรียบร้อยแล้ว!";
-
อื่น
-
echo "การอัพโหลดไฟล์ $UploadFile_name ($FileSize) ล้มเหลว!";
-
ยกเลิกการเชื่อมโยง($UploadPath.$FileName);
-
อื่น
-
echo "มีไฟล์ $UploadFile_name อยู่แล้ว!";
-
-
อื่น
-
echo "คุณไม่ได้เลือกไฟล์ใดๆ ที่จะอัปโหลด หรือไฟล์ที่อัปโหลดเกิน $MAX_FILE_SIZE!";
}
?>
<br><a href="uploadimg.php">กลับมา</a>
</ร่างกาย>
</html>
<?php
endif
?>
หลังจากเรียกใช้ ฉันพบว่าการอัปโหลดไม่มีผลใดๆ เลย และฉันไม่สามารถเข้าสู่หน้าการใช้งานได้ หลังจากค้นหาและถาม ฉันได้เรียนรู้ว่าจำเป็นต้องใช้ $_FILES เพื่อรับไฟล์ที่อัปโหลด
ดังนั้นฉันจึงทำการเปลี่ยนแปลงบางอย่าง:
$UploadFile=$_FILES['UploadFile']['tmp_name'];
$UploadFile_size=$_FILES['อัพโหลดไฟล์']['ขนาด'];
$UploadFile_name=$_FILES['อัพโหลดไฟล์']['ชื่อ'];
$FileName=strtolower($UploadFile_name);
ฉันคิดว่ามันจะเสร็จสิ้นแล้ว แต่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น:
คำเตือน: move_uploaded_file(F:Serverwww): ไม่สามารถเปิดสตรีม: การอนุญาตถูกปฏิเสธใน F:Serverwwweooolfinishuploadimg.php ออนไลน์ 76
คำเตือน: move_uploaded_file(): ไม่สามารถย้าย 'E:WINDOWSTEMPphp34.tmp' ไปที่ 'F:\Server\www' ใน F:Serverwwweooolfinishuploadimg.php ออนไลน์ 76
การอัปโหลดไฟล์ ****(****bytes) ล้มเหลว!
และฉันกำลังแก้ไขระบบ WIN ดังนั้นจึงไม่ควรมีปัญหาในการอนุญาตไฟล์ ฉันดูและคิดเกี่ยวกับมันแล้ว แต่ฉันก็ยังไม่เข้าใจ ฉันโพสต์ข้อความไปที่ Lao Lao และ Joy เพื่อขอความช่วยเหลือ แต่ฉันไม่ได้รับคำตอบที่ถูกต้อง การอัปโหลดไฟล์แบบง่ายๆ ใช้เวลามากกว่าหนึ่งวันและฉันก็ยังทำไม่สำเร็จซึ่งทำให้ฉันหงุดหงิดมาก ฉันไม่พบข้อผิดพลาดที่คล้ายกับของฉันบนอินเทอร์เน็ต
ในท้ายที่สุด ฉันไม่มีทางเลือกอื่นนอกจากต้องคิดว่าเหตุใดฉันจึงสามารถอัปโหลดไฟล์แนบได้สำเร็จเมื่อทำการดีบักด้วย sablog ดังนั้นฉันจึงดูโค้ดต้นฉบับอย่างรอบคอบสำหรับการอัปโหลดไฟล์แนบไปยัง sablog และทำการเปลี่ยนแปลงต่อไปนี้ตามโค้ด:
ฟังก์ชั่น getextension($ ชื่อไฟล์) {
return substr(strrchr($ชื่อไฟล์, "."), 1);
}
$extension=getextension($FileName);
if(move_uploaded_file($UploadFile,$UploadPath."temp.".$extension))
//unlink($UploadFile);
ยกเลิกการเชื่อมโยง($UploadPath."temp.".$extension);
ได้รับผลลัพธ์ทันทีและการอัปโหลดสำเร็จ!
ฉันใช้ unlink($UploadPath"temp.".$extension); ที่นี่เพื่อลบไฟล์ที่อัปโหลดไปยังพื้นที่ทันทีและประหยัดพื้นที่