GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ปัญหา PHP อ่าน Text file (ค่าภาษาไทย) เพื่อเก็บลง MySQL

รบกวนอาจารย์แนะนำด้วยครับ......



  ผมอัพโหลด textfile ไปวางบน server แล้วให้ php อ่านค่าใน text ไปเก็บใน mysql  แต่พบเจอฟิลด์ที่เป็นภาษาไทย กลับได้ค่าว่าง 



    ตัวอย่างtext  1|36213|นายอภิชาติ|กนกสิงห์|1|2515



    แต่เวลารันบน localhost กลับอ่านค่าได้เป็นปกติ



   อย่างนี้มีปัญหาที่ server หรือเปล่าครับ ต้องแก้ config อะไรหรือไม่

           - OS REDHAT

           - PHP 5.2.5

 
23 ม.ค. 2554 5 5,901

ไม่น่าเกี่ยวกับ Server....



ปัญหาอาจอยู่ที่คำสั่งที่ใช้ และ ภาษา



เช่น ถ้ามีการใช้ คำสั่งในกลุ่ม preg และใช้ UTF-8 ควรมี flag u



ไฟล์เป็น Ansi หรือ UTF-8



ถ้าไฟล์เป็น UTF-8 คำสั่งบางอันอาจไม่รองรับ อาจต้องเปลี่ยนไปใช้ฟังก์ชั่นในกลุ่ม mb เช่น mb_strpos แทน strpos (เติม mb_ หน้าฟังก์ชั่น)
#1

ผมใช้คำสั่ง

$rec = fgetcsv($handle, 1024, "|")

เก็บค่าจาก array



ต้องเปลี่ยนเป็นยังไงครับ  รบกวนขอแบบละเอียดครับ
#2

จะใช้ฟังก์ชั่นอะไร ก็ขึ้นกับรูปแบบของข้อความในไฟล์ครับ โดยปกติก็ใช้ฟังก์ชั่นในกลุ่ม string ครับ เช่น



explode()



split()



preg_match()



และ อื่นๆ อีกมากมาย



แต่สิ่งที่สำคัญคือ ต้องกลับไปดูว่า ข้อมูลในไฟล์มีลักษณะเช่นไร ใช้ อะไรเป็นตัวคั่นระหว่างฟิลด์ และ ใช้อะไรเป็นตัวคั่นระหว่าง record ถ้าคิดจะใช้ฟังก์ชั่นในกลุ่มใด ตอนสร้างไฟล์นั้นๆขึ้นมา ก็ต้องควบคุมรูปแบบของข้อความให้เป็นไปตามต้องการด้วย



ผมยกตัวอย่างนะ ข้อมูล



a|b|c|d\n

a2|b2|c2|d2\n



ข้อมูลด้านบน คั่นแต่ละฟิลด์ ด้วย | และ คั่นแต่ละ record ด้วย \n (รหัสขึ้นบรรทัดใหม่) การแยกออกก็จะใช้ฟังก์ชั่นแบบนี้



foreach(file('data.dat') AS $row) {

  $datas[] = explode('|', $row);

}

print_r($datas);



ปัญหาที่สำคัญของข้อมูลด้านบน คือ 

1. ไม่สามารถใช้ | ในข้อมูลได้ เนื่องจากเป็นตัวคั่น

2. ไม่สามารถใช้ \n ในข้อมูลได้ (ข้อมูลต้องไม่มีการขึ้นบรรทัดใหม่) เนื่องจากเป็นตัวคั่น เช่นกัน
#3

ขอบคุณมากครับ ได้ความรู้เพิ่มมากเลยครับ



เนื่องจากผมศึกษาการเขียน PHP เอง เลยไม่มีความรู้เท่าไหร่
#4


อย่างที่อาจารย์แนะนำ ใช้ได้เลยครับ  ผมเขียนอย่างนี้ครับ

 

$file="person.txt";

foreach(file($file) AS $row) {

     $arr = explode('|', $row);

     $arr_num = count($arr);

     for ($j=0; $j < $arr_num; $j++) {

          echo "$arr[$j] ";

     }

     echo "<br>";

 }

 

ใช้  explode แทน  fgetcsv ครับ



 


#5
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 2M
^