อัพโหลดไฟล์จากหน้าเว็บ เข้า server centos 7 ไม่ได้
ดูสิทธิ์การเข้าถึงโฟลเดอร์ที่เก็บไฟล์ด้วยครับ ต้องตั้งเป็น 775 หรือ 777 ก็ว่ากันไป
Date :
2017-08-29 14:34:24
By :
apisitp
ถ้า $success เท่ากับ true แสดงว่า move_upload_file() ทำงานเสร็จสมบูรณ์
และ $upload_path มีอยู่จริง เริ่มจาก directory ปัจจุบันที่ทำงานอยู่
แต่ real path คืออะไรก็เช็คเอานะครับ
ใช้ getcwd() ตรวจสอบ directory ปัจจุบันเป็นอะไร แล้ว บวก path folder ใหม่ เช็คดูว่าอยู่ตรงไหนแน่
Code (PHP)
if($success!==true)
{
echo "<script>alert('ERROR : ไม่สามารถ Upload ไฟล์ได้ !!' ".(isAdmin? getcwd() : '').") </script>";
exit; // เพิ่มโค๊ดตรงนี้ด้วย ควรหยุดการทำงานไม่ควรจะทำอะไรต่อไป แต่ก็แล้วแต่กรณีถ้ารู้ว่าจะทำอะไรต่อไป
}
ประวัติการแก้ไข 2017-08-29 20:52:44
Date :
2017-08-29 15:09:27
By :
Chaidhanan
ขอบคุณทั้งสองท่านมากๆ ครับ เดี๋ยวพรุ่งนี้จะไปลองทำดู ได้ผลยังไงแล้วจะแจ้งนะครับ
Date :
2017-08-29 20:17:56
By :
bleachakira
มันต้องใช้ คำสั่ง selinux เพื่อ อนุญาตให้ httpd เขียนไฟล์ได้
ลองใช้คำสั่งนี้
getsebool -a | grep http
เพื่อดูว่า allow_http..อะไรซักอย่าง... จำ property ไม่ได้ ได้ enabled หรือไม่
และใช้คำสั่ง
setsebool -P allow_http...อะไรซักอย่าง on
ลองเสริชหาดูเอานะครับ ผมก็ไม่ได้ใช้นานแล้ว คนแก่ลืมง่ายซะด้วย
จะค้นให้ก็ไม่ค่อยมีเวลา
Date :
2017-09-06 23:54:59
By :
Chaidhanan
ทำคำสั่งนี้
setsebool -P allow_httpd_anon_write 1
เสร็จแล้วต่อด้วยคำสั่งนี้
chcon -R -t public_content_rw_t /var/www
ยังไงก็หา document แต่ละคำสั่งอ่านเพิ่มเติมนะครับ จะได้ประโยชน์มากๆ เพราะมันทำอะไรได้อีกเยอะ
Date :
2017-09-07 09:40:34
By :
Chaidhanan
ถูกต้องครับ มันมีไว้เพี่อความปลอดภัยของ server
ที่นี้เครื่องเรา เราทำ จะอนุญาตทั้งหมดก็ได้ แต่ช่องโหว่ก็จะเยอะตามไปด้วย
ทำเป็นอันๆ ที่จำเป็นย่อมดีกว่า
Date :
2017-09-07 10:01:45
By :
Chaidhanan
รบกวนอีกรอบครับ ไฟล์บางไฟล์มัน อัพโหลดไม่ผ่านครับ ทั้งที่เป็นไฟล์ชนิดเดียวกัน
ผมลองอัพโหลด ไฟล์ pdf 2 ไฟล์ปรากฏว่าผ่าน 1 ไฟล์ไม่ผ่าน 1 ไฟล์ พอจะมีวิธีเช็คไหมครับ
ว่ามันไม่ผ่านเพราะอะไร
ตอนนี้ โค้ด ในการอัพโหลดเป็นแบบนี้ครับ
Code (PHP)
///// โหลดไฟล์
$ext = pathinfo(basename($_FILES['file']['name']),PATHINFO_EXTENSION); //เก็บชื่อไฟล์กับนามสกุลของไฟล์
$new_file_name = rand(100000,999999).".".$ext; //ทำการตั้งชื่อให้ใหม่ xxxx.ตามด้วยนามสกุลของไฟล์
$img_path = "myfile/"; //กำหนดที่โฟลเดอร์ที่จะเซฟอัพโหลดไว้
$upload_path = $img_path.$new_file_name; //โฟลเดอร์ที่เก็บ+ชื่อใหม่ของ
///// ขณะที่ Upload
$success = @copy($_FILES['file']['tmp_name'], $upload_path);
if($success==true) //หากอัพโหลดสำเร็จ
{
$file = $new_file_name;
}
else if($success==false)
{
echo "ERROR : ไม่สามารถ Upload ไฟล์ได้ !!555 ".(isAdmin? getcwd() : '')."".$img_path."";
exit;
}
ประวัติการแก้ไข 2017-09-07 11:21:17
Date :
2017-09-07 11:08:01
By :
bleachakira
php.ini upload_max_filesize
Date :
2017-09-07 11:22:26
By :
Chaidhanan
isAdmin
นี่เป็นโค๊ดสมมติ นะครับ กำหนดมันหรือยัง 5555 ไม่กำหนดนี่มันเป็นจริง ตลอดนะครับ
if($success==true) ตรงนี้ใช้ === (เท่ากับ 3 ตัว) ต้องเป็น boolean true เท่านั้น เป็นอย่างอื่นถือว่า false ทั้งหมด
ประวัติการแก้ไข 2017-09-07 11:42:36
Date :
2017-09-07 11:40:37
By :
Chaidhanan
ถ้ายังไม่เข้าใจส่วนนี้เอาง่ายๆก่อนก็แล้วกัน ที่ต้นโปรแกรม
define( "isAdmin", true); // กำหนดใช้ในขณะแก้ไขโปรแกรม
หรือ
define( "isAdmin", false); // กำหนดใช้เมื่อแก้ไขเรียบร้อยแล้วพร้อมใช้งานจริง
Date :
2017-09-07 13:38:35
By :
Chaidhanan
สุดยอดครับท่าน ผมทำทั้งวันยังไม่ได้ มาเจอท่านผมต้อง Thakyou สุดๆ ครับ
Date :
2019-01-09 19:51:56
By :
krootaya
Load balance : Server 03