Tôi có một tệp văn bản 1,3 GB mà tôi cần trích xuất một số thông tin từ trong PHP. Tôi đã nghiên cứu nó và đã đưa ra một vài cách khác nhau để làm những gì tôi cần làm, nhưng như mọi khi sau khi làm rõ một chút về phương pháp nào là tốt nhất hoặc nếu một cách khác tốt hơn mà tôi không biết?Cách tốt nhất để trích xuất văn bản từ tệp văn bản 1.3GB bằng PHP?
Thông tin tôi cần trong tệp văn bản chỉ là 40 ký tự đầu tiên của mỗi dòng và có khoảng 17 triệu dòng trong tệp. 40 ký tự từ mỗi dòng sẽ được chèn vào cơ sở dữ liệu.
Các phương pháp tôi có bên dưới;
// REMOVE TIME LIMIT
set_time_limit(0);
// REMOVE MEMORY LIMIT
ini_set('memory_limit', '-1');
// OPEN FILE
$handle = @fopen('C:\Users\Carl\Downloads\test.txt', 'r');
if($handle) {
while(($buffer = fgets($handle)) !== false) {
$insert[] = substr($buffer, 0, 40);
}
if(!feof($handle)) {
// END OF FILE
}
fclose($handle);
}
Trên đây là đọc từng dòng tại một thời điểm và nhận được dữ liệu, tôi có tất cả các cơ sở dữ liệu được sắp xếp chèn, làm 50 chèn vào một thời điểm mười lần trong một giao dịch.
Phương pháp tiếp theo giống như trên thực tế nhưng gọi file()
để lưu trữ tất cả các dòng trong một mảng trước khi thực hiện foreach
để nhận dữ liệu? Tôi không chắc chắn về phương pháp này mặc dù là mảng về cơ bản sẽ có hơn 17 triệu giá trị.
Phương pháp khác sẽ chỉ trích xuất một phần của tệp, ghi đè tệp bằng dữ liệu chưa sử dụng và sau khi phần đó đã được thực thi, hãy nhớ lại tập lệnh bằng cách sử dụng cuộc gọi header
?
Cách tốt nhất để thực hiện điều này một cách nhanh chóng và hiệu quả nhất là gì? Hoặc là có một cách tốt hơn để tiếp cận điều này mà tôi đã nghĩ đến? Ngoài ra tôi có kế hoạch sử dụng kịch bản này với wamp, nhưng chạy nó trong một trình duyệt trong khi thử nghiệm đã gây ra vấn đề với thời gian chờ ngay cả với thiết lập thời gian kịch bản ra 0. Có cách nào tôi có thể thực thi kịch bản để chạy mà không cần truy cập vào trang thông qua trình duyệt?
Đối với điểm cuối cùng, 'php path/to/script.php' sẽ thực thi tập lệnh. – sarnold
@ sarnold tôi có làm điều đó từ dòng lệnh không? Cảm ơn – Griff
Có, ngay từ dòng lệnh. Bạn cũng có thể biến nó thành một tệp kịch bản thực thi nếu bạn định thực thi nó thường xuyên bằng cách thêm '#!/Path/to/php' vào dòng đầu tiên của tập lệnh và sau đó chạy' chmod 755 path/to/script' hoặc 'chmod 500' hoặc bất kỳ điều khoản thích hợp nào bạn muốn. – sarnold