Page 1 of 1

ถาม ใครเคย upload file โดดยใช้ php บ้าง

PostPosted: Wed May 17, 2006 5:15 pm
by Kuzai
เขียนแล้วมัน error
Warning: copy(/images/Praw_no534_01[2].jpg) [function.copy]: failed to create stream: No such file or directory in c:\inetpub\wwwroot\test\up.php on line 14
Can't upload
บางทีก้อขึ้น error เกี่ยวกับ permission
ใครมีโค้ดตัวอย่างที่ upload ขึ้น server ได้ ก้อช่วย ๆ ตอบหน่อยเน้อ

PostPosted: Thu May 18, 2006 10:02 pm
by nat3
change permission ของ directory ด้วยค๊าบ สำหรับ permission นะ แต่ถ้าตาม error ที่ให้มา คาดว่าคงก๊อปปี้ไฟล์ที่อัพโหลดไปผิด เพราะ php หลังจากอัพโหลดจาก form แล้วมานจายัดเข้า temp file ก่อน เวลาจะใช้จริงต้อง copy temp ไฟล์ไปเก็บไว้จริงอีกที ไม่งั้น ไฟล์มานก็จาไม่มีอยู่จริงง่ะ ไว้เดี๊ยวจาหาโค้ดมาให้ดู เคยเขียนนานและ ตอนนี้มานก็หายไปกับกาลเวลาเอิ๊กๆ

PostPosted: Thu May 18, 2006 10:13 pm
by nat3
ขอปั๊มกระทู้หน่อยเตอะ เอิ๊กๆ
สำหรับที่มาก็ : http://www.tizag.com/phpT/fileupload.php

อานนี้เป็น code สำหรับสร้าง form upload ต้องกำหนด enctype เป็นแบบ multipart อย่าลืมๆ
สำหรับ hidden ็ตามชื่อที่ตั้งคือไว้กำหนดขนาดสูงสุดของไฟล์
Code: Select all
<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>


มาฝั่ง server บ้าง
Code: Select all
/* ตำแหน่งที่ไฟล์จะไปอยู่หลังจากอัพโหลดขึ้น server แย้ว
   สิทธิ์ของ Directory นี้ต้องสามารถเขียนได้ด้วยนะขอรับ
   (ถ้าเป็น unix ก็ 644 ถ้า windows ก็ดู security permission ดีๆ หละ) */
$target_path = "uploads/";

/*
Add the original filename to our target path. Result is "uploads/filename.extension"
ตามภาษาปะกิด ขี้เกียจแปล เหอๆ
*/
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

//สำหรับตรงนี้สำหรับ เอาไฟล์ที่อัพโหลดมาเก็บแล้วไปใช้จริงหละ
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

ถามอีกนิด

PostPosted: Tue May 23, 2006 4:16 pm
by Kuzai
อ่ะขอบคุณคร้าบ แล้วจาลองทำดูน่ะ.....ทำจาอาทิด และไม่เส็ดซะที ถามอีกอย่างน่ะ permission มันมีวิธีเซทงัยอ่ะ คือไม่รู้วิธีเช็ค วิธีดู ....รู้แต่ว่าเปน 755 เพิ่งเคยเขียนครั้งแรกอ่ะ มือใหม่สุด ๆ หรือใช้คำสั่ง chmod

PostPosted: Tue May 23, 2006 7:32 pm
by nat3
ใช้ chmod [mode file] [filename]
เช่น chmod 755 filename
สำหรับตัวเลขสามตัวก็แบ่งเป็น
ตัวแรกเป็นสิทธิ์ของเจ้าของไฟล์(owner)
ตัวที่สองเป็นสิทธิ์ของกลุ่มผู้ใช้(group) ที่ตั้งไว้
ตัวที่สามเป็นสิทธิ์ของคนทั่วไป(everyone)
สำหรีบตัวเลข 7 ก็มาจากเลขฐานสองสามหลักคือ 111 หรือสามารถอ่าน เขียนและ รันได้ ถ้าไม่อยากให้ทำอะไรก็เปลี่ยนหลักนั้นเป็นศูนย์ (rwx)

ที่จริงในโปรแกรม ftp สมัยนี้น่าจะมีวิธีการปรับที่ง่ายกว่านี้อ่ะนะ แบบคลิกขวาติ๊กๆ ง่ะ แต่ถ้าอยากใช้ command จริงๆ ก็ตามด้านบนหละ

PostPosted: Sat Jul 22, 2006 1:45 am
by natz
chmod 777 โลด ^^'

PostPosted: Thu Jul 27, 2006 2:30 am
by bigaun
ระวังเรื่อง security หน่อยครับ ถ้าจะใช้ chmod 777

PostPosted: Fri Jul 28, 2006 3:55 am
by nat3
bigaun wrote:ระวังเรื่อง security หน่อยครับ ถ้าจะใช้ chmod 777


เห็นด้วยยย เพราะ server ไม่ไช่เราควบคุมอยู่คนเดียวเกิดคนอื่นอยากเข้ามาดูใน Directory เราด้วยแล้วมาแก้ไฟล์ที่เราเซท เป็น 777 ไว้ แย่เลย :roll:

PostPosted: Sat Jun 07, 2008 9:43 am
by idatabase
ลอง Script ของผมหน่อยแล้วกันนะ

อันแรกคือแบบ Form สำหรับ Upload นะครับ (index.html)

Code: Select all
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-874">
<TITLE>แบบฟอร์ม Upload ไฟล์</TITLE></HEAD>
<BODY>
<FORM METHOD="POST" ACTION="upload.php" ENCTYPE="multipart/form-data">
<H3>ทดสอบการ Upload ไฟล์</H3>
   <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
   <INPUT TYPE="file" NAME="fileupload"><P>
   <INPUT TYPE="submit" VALUE="Upload ไฟล์">
</FORM>
</BODY>
</HTML>


ขออธิบายรายละเอียดการทำงานหน่อยนะครับ

Code: Select all
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">


จะเห็นว่า Input ของแบบฟอร์มนี้ จะระบุขนาดของไฟล์มากที่สุดที่สามารถอัพโหลดขึ้นไปได้ ซึ่งถ้าขนาดของไฟล์มากกว่าทีกำหนดไว้ จะไม่สามารถอัพโหลดได้ครับ
อย่างเช่นในตัวอย่าง ผมใส่ไป 1,000,000 ไบต์ ครับ

---------------------------------------------------------

ต่อไป เรามาดูสคริปที่ทำหน้าที่ Upload ไฟล์กันดีกว่าครับ (upload.php )

Code: Select all
<?
$fileupload=$_FILES['fileupload']['tmp_name'];
$fileupload_name=$_FILES['fileupload']['name'];
$fileupload_size=$_FILES['fileupload']['size'];
$fileupload_type=$_FILES['fileupload']['type'];

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" or $lastname=="gif" or $lastname=="txt" or $lastname=="rar") {
      copy($fileupload,"file/".$fileupload_name);
      echo "<h3> Upload เรียบร้อย </h3>";
     echo "ที่อยู่ของไฟล์คือ http://localhost/upload/file/$fileupload_name<br><br>";
     echo "รูปภาพตัวอย่าง (กรณีเป็นไฟล์ภาพ)<br><br>";
      echo "<img src='file/$fileupload_name'>";
   } else{
      echo "<h3>Upload ไม่ได้</h3>";
   }
   unlink($fileupload);
} else {
   echo "<h3>Upload ไม่ได้</h3>";
}
?>


ขออธิบายการทำงานของสคริปนี้อีกหน่อยแล้วกันครับ

Code: Select all
if ($lastname=="gif" or $lastname=="jpg" or $lastname=="jpeg" or $lastname=="gif" or $lastname=="txt" or $lastname=="rar") {


ตรงส่วนนี้ คือ นามสกุลของไฟล์ ที่สามารถอัพโหลดขึ้นไปได้ แต่ถ้าเราต้องการเพิ่ม ก็สามารถเพิ่มไปได้ โดยก๊อปปี้โค้ด or $lastname=="นามสกุลไฟล์" ไปวางต่อท้ายของ or $lastname=="rar" อ่ะครับ

แต่ข้อควรระวังคือ ไม่ควร เพิ่มนามสกุล พวก php, asp และนามสกุลไฟล์ที่เป็นพวก webscript นะครับ ไม่งั้น คุณโดน hack แน่

ต่อไปให้มาดูตรงส่วนนี้ครับ

Code: Select all
echo "ที่อยู่ของไฟล์คือ http://localhost/upload/file/


ให้เราเปลี่ยนจาก http://localhost เป็นเว็บไซต์ของเรานะครับ เช่น http://www.idatabaseblog

------------------------------------

สุดท้ายครับ ผมขอทวนหลักการทำงานของสคริปนี้นะครับ

1.ต้องมีแบบฟอร์มอัพโหลดชื่อ index.html

2.ต้องมีสคริปไฟล์ที่ทำหน้าที่อัพโหลด upload.php

3.ต้องสร้างโพลเดอร์ที่ชื่อว่า file ขึ้นมาเพื่อรับไฟล์ที่อัพโหลดขึ้นมา

4.ทั้งข้อ 1, 2, และข้อ 3 ควรจะอยู่ในโพลเดอร์ upload เดียวกันทั้งหมด

สุดท้ายของสุดท้ายครับ ขอให้สนุกกับ php นะครับ
มีคำถามอะไรหรือติดขัดตรงไหน ถามมาได้ครับ ยินดีช่วยเสมอ สำหรับชาว WebApplication