คือ ผม อยากเขียน หน้าเวป  อ่านไฟล์  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  แล้วต้องทำเป็นเดือนอ่ะครับ 



ช่วยชี้แนะทีครับ
บุ้ง 29 May 2013 09:58
ผมว่าไม่น่าจะได้นะ ไฟล์ 4g เปิดกับ editor ทั่วไปยังกระตุกเรยครับ ไม่งั้นก้ต้องเขียน script อะไรให้ไปอ่านเรื่อยๆนะครับ อย่าให้ครบวัน
กรกฎ วิริยะ 29 May 2013 10:18
พุทธชาติ คำสระสม 29 May 2013 13:27
ลองแล้วครับ ก้อยังไม่เห็นผล   เหอะๆ  
กรกฎ วิริยะ 29 May 2013 18:57
คำแนะนำ...



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



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



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



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



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



หมายเหตุ php ทำงานกับไฟล์ขนาดใหญ่ได้ครับ และก็ค่อนข้างเร็วด้วย
พุทธชาติ คำสระสม 14 Jun 2013 13:39
คือ ผมจะ นำ ข้อมูลแต่ ละบรรทัด มาจัดกรุป ครับ ประมาณว่าถ้าเหมือนกัน ให้ กรุ้ป รวมเป้น หนิ่ง 





เลยจำเป็นต้องอ่านทุกบรรทัด เพื่อ นับจำนวนคับ 
กรกฎ วิริยะ 14 Jun 2013 14:24
ถ้าข้อมูลมากขนดนั้นก็ไม่มีตัวเลือกอื่น นอกจากการเพิ่มหน่วยความจำ เพื่อให้ประมวลผลได้



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



1 จัดกลุ่มข้อมูลตั้งแต่ตอนอ่าน เช่น ถ้าต้องการอ่าน IP ที่ไม่ซ้ำกัน ก็รวมไปเลยตั้งแต่ตอนอ่าน

2 อ่านทีละบรรทัด อ่านไปประมวลผลไป ตามข้อ 1

3 เก็บเฉพาะข้อมูลที่ต้องการ เท่านั้น อะไรที่ไม่ใช้กตัดออกไปเลยเพื่อลดหน่วยความจำ

4 ทำทั้งหมดใส่ array ถึงจะทำได้ เตรียมข้อมูลให้เสร็จแล้วค่อย แสดงผล

5 วิธีการเรียงลำดับก็มีผลกับหน่วยความจำ เลือกฟังก์ชั่นให้ถูก จะใช้หน่วยความจำน้อยทีสุด