Saturday, May 12, 2012

upload image or doc or pdf

พอดีไปตอบกระทู้แนวๆ เขียน code ไว้ที่ พันติ๊บ อีก เช่นเดิม
เลยเอามาลงไว้ใน blog ซะหน่อย

<form enctype="multipart/form-data" method="POST">
upload image or doc or pdf:
<input name="uploadedfile" type="file" />
<input type="submit" value="Upload" /><br>
</form>

<?
$upload_dir = "/home/unknown/www/stephack.local/test/";
# ที่อยู่ไฟล์ที่จะ save (ถ้าบน linux chmod folder นั้นๆ ให้เขียน ได้ด้วย ล่ะ)

$max_file_size = 2*1024*1024;
# ขนาด file ที่ limit
# ตามปกติ config ของ server จะ limit ใน php.ini กันที่ 2Mb
# ดังนั้น ถึงจะใส่เกิน 2Mb ก็อัพไม่ได้หรอก

$file_allow = array(".bmp", ".gif", ".jpeg", ".jpg", ".pdf", ".doc", ".docx");
# ประเภทไฟล์ที่อนุญาติ ให้ upload ขึ้นมาได้

if($_FILES['uploadedfile']){
if($_FILES['uploadedfile']['size']>$max_file_size) exit("file size limit");
# เช็คขนาดไฟล์

$tmpfile = pathinfo($_FILES['uploadedfile']['name']);
# สร้าง ตัวแปล tmp มาเก็บ ชื่อไฟล์
# จะเขียนอย่างอื่นก็ได้นะ เช่นเอาจาก ใน $_FILES เลยก็ได้

$file_name = preg_replace('~[^a-z0-9ก-๙]~iu', "", $tmpfile['filename']);
# ลบตัวอักษรแปลกๆ ในขื่อ
# (ถ้าไม่กังวลเรื่องชื่อไฟล์ ก็ random ชื่อไฟล์ ไปโลด)

$extension = strtolower(strrchr($tmpfile['basename'],'.'));
# ตัดเอาเฉพาะนามสกุลของไฟล์

if(!in_array($extension, $file_allow)) exit("wrong extension");
# เช็คนามสกุลไฟล์
# ***เสริม .. เวลาคนแฮกจะเนียลอัพ phpshell ขึ้นมา (bypass upload)
# นอกจากการปลอม mime-types ฝั่ง client แล้ว
# มักจะใช้ชื่อไฟล์ php เป็น image.jpg.php image.php.jpg image.php;.jpg อะไรประมาณเนี้ย

if(move_uploaded_file($_FILES["uploadedfile"]["tmp_name"], $upload_dir.$file_name.$extension)) echo "upload done";
# อัพเสร็จก็แสดงข้อความ ซะหน่อย

else echo "unkown error";
# อัพไม่ได้ ก็ แสดง error ซะหน่อย 
# ส่วนมากปัญหา จะเพราะ folder ไม่ได้ chome 0755, 0777 ไว้ แหละ
}
?>

ref : http://www.pantip.com/tech/developer/topic/DW3060307/DW3060307.html

No comments:

Why You Don't LIKE My FaceBook Fanpage ?
×
blogger