ปัญหา 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 3,517

ไม่น่าเกี่ยวกับ 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 ขนาดไฟล์ไม่เกิน 1024
^