เพิ่มรูปลง ดาต้าเบส แล้วขึ้น ERROR [function.copy]: failed to open stream
path ที่ copy ไปรึเปล่าครับ
ไฟล์นี้อยู่ใน โฟลเดอร์ admin อีกที
สังเกตุจาก ที่เรียกใช้ไฟล์ include("../connect.php");
แปลว่า ไฟล์ connect.php อยู่ที่
localhost/ths_fb/connect.php
ใช่หรือไม่ครับ
ถ้าใช่
แล้วโฟลเดอร์ที่ต้องการ save ไฟล์ที่อัพโหลดมาอยู่ตามนี้รึเปล่า
localhost/ths_fb/img/img_pro/
ถ้าใช่งั้นน่าจะแก้ตรงคำสั่ง copy เป็นแบบนี้ครับ
Code (PHP)
copy($_FILES["pro_img"]["tmp_name"],"../img/img_pro/".$_FILES["pro_img"]["name"]);
เพราะแบบเดิม img/img_pro/".$_FILES["pro_img"]["name"]
มันน่าจะสื่อถึงว่า โฟลเดอร์ img/img_pro นั้นอยู่ที่ path
localhost/ths_fb/admin/img_pro แบบนี้รึเปล่า
ลองดูครับเพราะ error ที่แจ้ง น่าจะประมาณว่า หา folder ที่ใช้เก็บรูปภาพที่ อัพโหลดไม่เจอ หรือยังไงสักอย่าง
แล้วก็ไม่แน่ใจว่า มันมีปัญหากับ ชื่อไฟล์รึเปล่า ที่มี เว้นวรรค img/img_pro/Click LIKE.png
เพราะปกติผมจะ rename ไฟล์ที่อัพโหลดมาก่อนทุกครั้ง
Date :
2012-02-15 13:14:50
By :
Likito
ไฟล์ย้ายได้แล้วค่ะ ขอบคุณสำหรับคำแนะนำ
ขอรบกวนอีกนิดนึ่งว่าถ้าต้องการเปลี่ยนชื่อไฟล์ เมื่ออับโหลดไปแล้ว ต้องทำยังไง ค่ะ
Date :
2012-02-15 13:34:22
By :
sajok
$new_image = "ชื่อที่เปลี่ยน".$_FILES["pro_img"]["name"]
แล้วเอา $new_image ไปใช้งานครับ
Date :
2012-02-15 14:31:54
By :
Dragons_first
เพิ่มเติมจากคุณ อ้นคุง ให้ครับ
function copy();
นั้น
copy("ที่อยู่ไฟล์ต้นฉบับ","เป้าหมายที่ต้องการบันทึก");
ที่อยู่ไฟล์ต้นฉบับนั้นใช้เป็น $_FILES["pro_img"]["tmp_name"] ถูกต้องแล้วครับ
เพราะตอนอัพโหลด ผมเข้าใจว่าจริงๆแล้ว ระบบมันจะ บันทึก ไฟล์เป็น tmp ไว้ซักที่นึง ในเครื่องเราซึ่งไม่ใช่ในโฟลเดอร์ project เพราะถ้าลอง echo $_FILES["pro_img"]["tmp_name"]; ออกมาดู มันจะเป็นชื่อไฟล์ แปลกๆหน่อย
แล้วเราใช้คำสั่ง copy(); เพื่อ copy ไฟล์ที่อัพโหลดขึ้นมานั้น มันจะ copy จาก Path อันแรก ไป ไว้ตามที่เรากำหนด
เช่น "../img/img_pro/".$_FILES["pro_img"]["name"]
ซึ่งหมายถึงว่า มันจะ copy ไฟล์นั้น ไปไว้ที่
localhost/ths_fb/img/img_pro/ชื่อไฟล์
เช่นถ้าเกิดชื่อไฟล์ ก่อนอัพโหลดนั้นเราชื่อ Click LIKE.png
มันก็จะได้เป็น
localhost/ths_fb/img/img_pro/Click LIKE.png ครับ
เพียงแค่เราเปลี่ยน Click LIKE.png เป็นชื่ออื่นแค่นั้นก็ได้ครับ
ซึ่งหลักการทำงาน เราต้องมา แยก $_FILES["pro_img"]["name"]
ออกมาก่อน เพื่อจะเอา นามสกุลของไฟล์ นั้นออกมาครับ
เช่น Click LIKE.png เราต้องมาแยกก่อน เพื่อให้ได้ .png
ส่วนชื่อไฟล์นั้นเราอาจจะตั้งใหม่ โดยใช้วิธีการ เอาวันเดือนปี เวลาปัจจุบัน มาตั้งชื่อไฟล์ ก็ได้
เช่น
2012_02_15_145725.png
Date :
2012-02-15 14:53:25
By :
Likito
ขอบคุณค่ะสำหรับความรู้ใหม่ ^^
โหวตให้นะค่ะ ^^
Date :
2012-02-15 14:57:23
By :
sajok
เพิ่มเติมจากคุณ Likito หน่อยนะครับ ฟังชั่น copy(); ให้เปลี่ยนไปใช้ move_uploaded_file(); แทนครับ
Date :
2012-02-15 15:09:48
By :
Dragons_first
เพิ่มเติมให้
Code (PHP)
if(trim($_FILES["fileUpload"]["tmp_name"]) != ""){
$path="./images";
$images = $_FILES["fileUpload"]["name"];
$tmp = $_FILES["fileUpload"]["tmp_name"];
$rand = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789_'),0,10);สร้างชื่อใหม่โดยการแรนดอมมา 10 ตัว
$new_images = $rand.$_FILES["fileUpload"]["name"];นำมาต่อเป็นชื่อใหม่
move_uploaded_file($tmp,$path."/".$new_images);ย้ายรูปไปเก็บไว้ใน พาร์ท
}
เวลาบันทึกก็เอา $new_images ไปใช้ครับ
Date :
2012-02-15 15:13:58
By :
Dragons_first
Load balance : Server 02