A-AA+then

ขอความรู้หน่อยคับ php อ่านค่า text file ขนาดใหญ่ 4 gb ได้ไหมคั

1,615
คือ ผม อยากเขียน หน้าเวป  อ่านไฟล์  text ขนาด 4 gb เป็นไฟล์ที่เก็บ log คนเข้าใช้งานอินเทอเน็ตครับ
จะเอาข้อมูลแต่ละบรรทัด มา แยกว่า ไอพี นี้ ออกเวปไหน  ออกเวลาอะไร

คือผมลองเขียนแล้วมัน error ว่า    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4097 bytes) in C:\AppServ\www\read2.php on line 14


บรรทัดที่ 14 ผม


13.   $objOpen = fopen ("foder/syslog_20-02-2013.txt", "r"); /*** folder ***/
14.   while ($file = fgets($objOpen,4096))
15.   {
16.    
17.        $arrFile[] = $file;
18.    
19.    }

ผมลองรันดูแล้ว ในไฟล์อื่นๆที่ขนาดน้อยกว่านี้ สามารถรันได้ครับ  อยากทราบวิธีการหรืออาไรก้อได้ที่ทำไห้มันอ่านไฟล์ได้

หรือควรจะเก็บเข้าฐานข้อมูลก่อน  แล้วจึงนำข้อมูลนั้นมาประมวลผล อีกทีครับ   คือไฟล์มันจะมีทุกวัน วันละ 3 4 gb  แล้วต้องทำเป็นเดือนอ่ะครับ 

ช่วยชี้แนะทีครับ

6 ความคิดเห็น

ผมว่าไม่น่าจะได้นะ ไฟล์ 4g เปิดกับ editor ทั่วไปยังกระตุกเรยครับ ไม่งั้นก้ต้องเขียน script อะไรให้ไปอ่านเรื่อยๆนะครับ อย่าให้ครบวัน
1

2

ลองแล้วครับ ก้อยังไม่เห็นผล   เหอะๆ  
3

คำแนะนำ...

ผมไม่รู้ว่าต้องการทำอะไรนะครับแต่จะเป็นไปได้หรือไม่ ที่จะไม่ต้องโหลดไฟล์ทีเดียวทั้งหมด เช่น

อาจโหลดไฟล์ใส่ตัวแปร แค่จำนวนหนึ่ง แล้วส่งกลับ โดยอาจใช้ Ajax ช่วยโหลดทีละ 1000 บรรทัดก็ได้ หรือ

อาจโหลดแค่บรรทัดล่าสุดจำนวนหนึ่งเท่านั้น มาใช้งาน หรือ

อาจอ่านไฟล์ทีละบรรทัด ประมวลผลทันที และเก็บเฉพาะข้อมูลที่ต้องการส่งกลับเท่านั้นไว้ ก็ได้

จริงๆมีอีกหลายวิธีครับ ขึ้นกับความจำเป็นในการใช้งาน แต่โดยหลักการแล้ว แค่เก็บเฉพาะข้อมูลที่ต้องการเท่านั้นครับ

หมายเหตุ php ทำงานกับไฟล์ขนาดใหญ่ได้ครับ และก็ค่อนข้างเร็วด้วย
4

ขอความรู้หน่อยคับ  php อ่านค่า text file  ขนาดใหญ่ 4 gb ได้ไหมคั
คือ ผมจะ นำ ข้อมูลแต่ ละบรรทัด มาจัดกรุป ครับ ประมาณว่าถ้าเหมือนกัน ให้ กรุ้ป รวมเป้น หนิ่ง 


เลยจำเป็นต้องอ่านทุกบรรทัด เพื่อ นับจำนวนคับ 
5

ถ้าข้อมูลมากขนดนั้นก็ไม่มีตัวเลือกอื่น นอกจากการเพิ่มหน่วยความจำ เพื่อให้ประมวลผลได้

แต่สิ่งที่ควรทำคือ ทำอย่างไรให้ใช้หน่วยความจำน้อยที่สุด เช่น

1 จัดกลุ่มข้อมูลตั้งแต่ตอนอ่าน เช่น ถ้าต้องการอ่าน IP ที่ไม่ซ้ำกัน ก็รวมไปเลยตั้งแต่ตอนอ่าน
2 อ่านทีละบรรทัด อ่านไปประมวลผลไป ตามข้อ 1
3 เก็บเฉพาะข้อมูลที่ต้องการ เท่านั้น อะไรที่ไม่ใช้กตัดออกไปเลยเพื่อลดหน่วยความจำ
4 ทำทั้งหมดใส่ array ถึงจะทำได้ เตรียมข้อมูลให้เสร็จแล้วค่อย แสดงผล
5 วิธีการเรียงลำดับก็มีผลกับหน่วยความจำ เลือกฟังก์ชั่นให้ถูก จะใช้หน่วยความจำน้อยทีสุด
6
^