การ Upload ไฟล์ เปลี่ยนมาใช้ฟังค์ชั่น move_upload_file แทน copy ดีกว่าครับ
ผมว่า move_upload_file() ก็มีข้อเสีย มันต้องดึง temp จาก server สู่ไดเรททรอรีเป้าหมายใน server
ส่วน copy() มันดึงจาก temp จากเครื่องเรา สู่ไดเรททอรรีเป้าหมายใน server
ผมเข้าใจผิดป่ะครับ ผิดก็โทษที่นะครับ
http://community.thaiware.com/index.php?showtopic=327170
อันนี้อีกข้อมูลหนึ่งที่เขาอธิบายให้ฟังอีก
Date :
2009-10-15 18:45:33
By :
xbeginner01
ผมคิดว่าไม่นะครับ (ยังไม่ได้อ่าน)
แต่ผมคิดว่า มันดึงจาก temp ใน server เหมือนกันแหละครับ
Date :
2009-10-15 18:49:11
By :
pjgunner
คห. แรก
เออ น่าจะเข้าใจผิดนะครับ
ไฟล์ที่อัพโหลดจะถูกเก็บไว้ใน เครื่อง Server นะ
จะเก็บใน temp เครื่องเราทำไมอา -*-
Date :
2009-10-15 19:12:31
By :
danya
อัพโหลดยังไงก็เข้า temp บน server อยู่แ้ล้วครับ
อยู่ที่ว่า php.ini มันจะ set ไว้ตรงไหนของ server ถ้าไม่ set มันจะอยู่ที่ default ของเครื่อง
ไม่มีหรอกมาดูดจาก temp เครื่องเรา เพราะมันทำงานฝั่งเซอเวอร์ครับ อัพโหลดทีมันก็สร้าง temp ไว้ นามสกุล .tmp มั้ง
ดังนั้นสองคำสั่งนี้ ต่างกันที่ move กับ copy ครับ
ปล. ผมไม่เคยใช้ copy ตั้งแต่หัดครั้งแรกละ เพราะใ้ช้แล้วมัน error ก็เลย หันมาใช้ move_upload แทน เหอะๆ error ครั้งเดียวก็เข็ดละ แป๋ววว...
ปล. 2 ทำไมอยู่ดีๆ ดุนมารณรงค์ซะงั้น
Date :
2009-10-15 19:25:52
By :
plakrim
ปล.3 เพราะว่า ตามเว็บไทย ผมเห็นเวลาโค้ดอัพโหลดแล้ว จะชอบใช้ copy กันจัง
ต่างจากค้นหาจาก Google จะไม่มีใครใช้ copy จะใช้แต่ mode_upload_file
Date :
2009-10-15 20:36:56
By :
danya
move_upload_file <<< ทำไมใช้ไม่ได้อะครับหรือว่าเขียนให้ดูเฉยๆ
ที่ใช้เป็นอันนี้รึป่าวครับ move_uploaded_file เห็นอยู่ตรง โพสที่ 3
Date :
2009-10-16 00:38:24
By :
hamzter
เขียนย่อๆ อะ 5555+
Date :
2009-10-17 16:26:02
By :
danya
แล้วมันใช้งานยังไงคับ ผมอยากทำเป็นบ้าง ตอนนี้ ใช้ copy แล้วมัน error นะคับ แบบนี้นะคับ
Warning: copy(photo/29.gif) [function.copy]: failed to open stream: Permission denied in D:\inetpub\vhosts\hattakam.com\httpdocs\admin_product_edit2.php on line 174
ไม่รู้ว่ามันเป็นเพราะอะไร พี่ ๆ ช่วยผมหน่อยได้ไหมคับ ขอบคุณคับ
Date :
2010-10-19 09:11:33
By :
เด้กฝึกหัด
ถ้ามันไม่ลบเราก็ลบให้มันสิครับ unlink(file); อ่ะ
Date :
2010-10-19 09:20:55
By :
manosate
ผมใช้ script นี้คับ ... ผมทำในเครื่อง server จำลอง มันก็สามารถ เพิ่ม ลบ แก้ไข้ รูปภาพได้นะคับ แต่ ผมเอาลง sever จริง ๆ แล้ว
มันขึ้น error นะคับ Warning: copy(photo/29.gif) [function.copy]: failed to open stream: Permission denied in D:\inetpub\vhosts\hattakam.com\httpdocs\admin_product_edit2.php on line 174
..................................................................................................................................................................................
<?
$chkdel=$_POST[chkdel];
$id_edit=$_POST[id_edit];
$name=$_POST[name];
$ref_id_type=$_POST[ref_id_type];
$detail=$_POST[detail];
$price=$_POST[price];
$photo=$_POST[photo];
$fileupload=$_FILES['fileupload'] ['tmp_name'];
$fileupload_name=$_FILES['fileupload'] ['name'];
$fileupload_size=$_FILES['fileupload'] ['size'];
$fileupload_type=$_FILES['fileupload'] ['type'];
include "connect.php";
if ($chkdel=="1") {
$sql3="update tb_product set photo_prd=' ' where id_prd ='$id_edit' ";
$result3=mysql_db_query($dbname,$sql3);
unlink ("photo/$photo_del");
}
if ($fileupload) {
$array_last=explode(".",$fileupload_name);
$c=count ($array_last) - 1;
$lastname=strtolower($array_last[$c]);
if ($lastname=="gif" or $lastname=="jpg" or $lastname=="jpeg"){
$photoname=$id_edit.".".$lastname;
copy ($fileupload,"photo/".$photoname);
$sql3="update tb_product set photo_prd='$photoname' where id_prd ='$id_edit' ";
$result3=mysql_db_query($dbname,$sql3);
}
unlink ($fileupload);
}
$sql="update tb_product set
name_prd='$name',ref_id_type='$ref_id_type',detail_prd='$detail',price_prd='$price' where id_prd='$id_edit' ";
$result=mysql_db_query($dbname,$sql);
if ($result) {
echo "<h3> แก้ไข สินค้าเรียบร้อยแล้ว </h3>";
echo " [ <a href=admin_product.php>กลับหน้าหลัก </a> ]";
} else {
echo " <h3> ERROR : ไม่สามารถแก้ไขสินค้าได้ </h3>";
}
mysql_close();
?>
Date :
2010-10-19 09:25:31
By :
เด้กฝึกหัด
มานติดเรือ่ง Permission อยู่้ครับ เวลาที่คุณจะ upload คุณต้อง ปรับ Permission ก่อนครับ ลองดูครับ
Date :
2010-10-19 09:28:03
By :
SOUL
ปกติใช้แต่ copy ครับ แต่ถ้าให้ดีใช้การ move ดีกว่าครับ
Date :
2010-10-19 09:33:46
By :
webmaster
คือว่า ผมต้อง Permission ยังไงคับ แล้ว เปลียน ไฟล์ไหนคับ ช่วยผมที ผมทำยังไม่ได้คับ
Date :
2010-10-19 10:11:56
By :
เด้กฝึกหัด
หรือว่ามีวิธีไหนที่ง่ายกว่านี้ช่วยบอกผมทีคับ
Date :
2010-10-19 10:13:02
By :
เด้กฝึกหัด
ใช้ move_uploaded_file เท่านั้นครับ copy เสี่ยงต่อการถูก hack แต่จริงๆ คนมักจะ hack เพราะไม่ได้ตรวจนามสกุลไฟล์ที่ upload มากกว่า.. -*-
Date :
2010-10-19 10:15:08
By :
...
พี่ ๆ ช่วย ยกตัวอย่างการใช้งานให้หน่อยคับ หรือ ไม่ก็ script ตัวอย่าง พอที่จะให้ผม มีแนวทาง การใช้งาน หน่อยคับ ผมไม่รู้ว่า move_upload_file มันใช้งานยังไงคับ ขอบคุณคับ
Date :
2010-10-19 10:18:27
By :
เด้กฝึกหัด
ผมทำได้แล้วคับ ขอบคุณมากคับสำหรับ คำตอบของพี่ ๆทุกคน ผมไปปรับ permission ก็เลยสามารถ upload รูปได้แล้ว ดีใจมากมายเลย
([ 0_0])
Date :
2010-10-19 10:52:36
By :
เด้กฝึกหัด
ใช้ copy ก็ได้ครับ ดีกว่า เพียงแต่ว่า ถ้ามีชื่อไพล์ซ้ำกันมันก็จะแก้ไข ไพล์นั้นเลย เราควรเช็คชื่อไพล์ ถ้าชื่อซ้ำก็ให้ใส่อะไรเข้าไปในชื่อไพล์เพื่อให้ชื่อมันไม่ซ้ำกัน ก็แค่นี้ครับ
ตัวอย่างการ ลบ ชื่อไพล์ฐานข้อมูล ในไพล์ข้อมูลในฐานข้อมูล
$sql2 = "SELECT* from attach_doc where documents_id = '$delete'";
$dbquery2 = mysql_query($sql2);
$result2 = mysql_fetch_array($dbquery2);
$d_file1 = $result2["d_file1"];
$d_file2 = $result2["d_file2"];
$d_file3 = $result2["d_file3"];
if($d_file1 != "") {
///////////////////////////////////////////////////////////// unlink คือการ ลบไพล์ข้อมูลใน host
unlink("d_file1/$d_file1");
} elseif($d_file2 != "") {
unlink("d_file2/$d_file2");
} if($d_file3 != "") {
unlink("d_file3/$d_file3");
}
///////////////////////////////////////////////////////////////////////// การลบข้อมูลในฐานข้อมูล
$strSQL = "DELETE FROM attach_doc ";
$strSQL .="WHERE documents_id = '$delete'";
$objQuery = mysql_query($strSQL);
////////////////////////////
$file1 = $_FILES["d_file1"]["name"]; /////// การชื่อไพล์
if($file1 != "") {
$sqlf = "SELECT* from attach_doc WHERE d_file1 = '$file1'"; ///////////// หาในฐานข้อมูลว่ามีชื่อไพล์ซ้ำกันมั้ย
$dbqueryf = mysql_query($sqlf);
$resultf = mysql_fetch_array($dbqueryf);
if ($resultf) {
$file1 = $re2._.$file1; ///////////////// ถ้าซ้ำให้ใส่ เวลาข้างหน้าไพล์ เพิ่มเป็นชื่อไพล์อีก
}
}
//////////////////////
copy($data_file1,"d_file1/".$file1); ////////// นี้ไง copy ไพล์หนะ
copy($data_file2,"d_file2/".$file2);
copy($data_file3,"d_file3/".$file3);
////////////////// add ชื่อไพล์เข้าสู่ฐานข้อมูล
$strSQL = "INSERT INTO attach_doc";
$strSQL .="(d_file1, d_file2, d_file3, documents_id) VALUES ('".$file1."', '".$file2."', '".$file3."', '$report2')";
///////////
ลองไปปรับ ใช้ดูนะครับ มีข้อส่งสัย
[email protected]
Date :
2010-10-29 21:13:49
By :
manersci
move_uploaded_file ช่วยเรื่อง security ได้นะครับ
Date :
2010-10-30 17:23:01
By :
unknowszaa
คำสั่ง move กับ copy ต่างกันตรงไหน มีคำตอบมาให้ครับ
คำสั่ง move
เมื่อเราใช้ temp จะหายทันทีหลัง อัพเสร็จ ข้อดี คือ ประหยัด temp (ram) ข้อเสียเรียกใช้เพียงครั้งเดียว ถ้าไฟตกหรือด้วยเหตุไดๆ temp เสีย ไฟล์ที่อัพไปจะไม่สมบรูณ์ cpu จะไม่มีการตรวจเช็คว่า สมบูรณ์ แต่เช็คแค่ว่า อัพผ่าน แค่นั้น
คำสั่ง copy
เมื่อใช้คำสั่งแล้ว temp จะยังอยู่ สามารถเรียกใช้งานได้เรื่อยๆ past ได้เรื่องๆจาก temp เดิม ถ้ามีการเรียกใช้งานtempเดิมบ่อยๆ แนะนำให้ copy cpuตรจสอบ ข้อมูลเทียบ ได้ ข้อเสีย ต้อง Destroy หรือ unlink ทุกครั้ง หลังทำเสร็จ ไม่งั้น temp ค้าง สามารถโดย hack copy tempไปใช้ประโยชน์อื่นได้ และทำให้เครืองทำงานหนัก
แต่** ถ้าเป็นการ up to sever แล้วจาก ทีหนึ่งไปอีกที่ 1 ไป อีกที 1 temp จะอยู่บน server จะหายไปเอง ตามระยะเวลา ที่ php ini ได้ตั้งไว้ และ temp ในการเรียก ในเครื่องเราจะหายไปตอน เรา เปลี่ยนหน้าเว็บจากหน้า a ไป b ถ้ากระทำ ในหน้า a.php ตลอดๆ ก็จะทำให้ กิน ram ในเครื่องเรามากขึ้นในกรณี copy รัวๆ ข้อระวังใช้คำสั่ง copy อย่าเขียนโปรแกรม loop ไม่สิ้นสุด งั้นเครื่องมี ค้าง แงมๆ
Date :
2018-03-27 15:28:36
By :
วีรวิทย์
Load balance : Server 05