01/10/2018, 13:31

Thắc mắc tải file với php

Gửi ACE

Hiện nay, Mình đang viết 1 phần mềm bằng php nhỏ, chạy trên XAMPP tại máy cá nhân. Mục đích là tải khoảng 4000 file json từ 1 trang web.
Hiện nay, mình sử dụng 3 vòng lặp for lồng nhau để tìm đến url của mỗi file json. các fle Json được phân bổ nằm trong các page, các page lại được phân bổ nằm trong các grade

Mình sử dụng 3 vòng lặp for lồng nhau để truy suất hết vào các grade => các page => các file JSON.

Hiện nay đang có vấn đề như sau. Khi mình kiểm tra thử với mẫu khoảng 100 file json thì vẫn ổn, nhưng khi sử dụng với trên 4000 file JSON thì có hiện tượng như sau:

  • Khi chưa down hết các file trong grade 0 thì vòng lặp tự nhảy sang grade 1 để down tiếp, các file trong grade 0 vẫn được down tiếp tục, cái này mình không rõ là do apache của xampp chạy như thế hay do php có cơ chế nào khác mà server tự động nhảy sang vòng lặp kế khi chưa thực hiện hết code trong vòng lặp hiện tại.
  • Các file mặc dù đã down xong vẫn có hiện tượng nhảy dung lượng về 0Kb.

Code như sau:

$page = curl($urlContent0 . "g=" . $list[0][1] . "&" . "f=0");
        for ($i = 0; $i < 11; $i++) {
            for ($j = 0; $page["count"] > 0; $j++) {
                if (!file_exists($list[$i][0] . "/" . (string) $j)) {
                    mkdir($list[$i][0] . "/" . (string) $j);
                }
                for ($k = 0; $k < $page["count"]; $k++) {
                    $id = $page["hits"][$k]["_id"];
                    curl_dl($urlContent1 . $id, $list[$i][0] . "/" . (string) $j . "/" . $id);
                    
                }
                $page = curl($urlContent0 . "g=" . $list[$i][1] . "&" . "f=" . ($j + 1));
            }
            if ($i < 1) {
                $page = curl($urlContent0 . "g=" . $list[$i + 1][1] . "&" . "f=0");
            }
        }
Tên Gì Cũng Được viết 15:34 ngày 01/10/2018

Hình như việc bạn down xong chưa ko liên quan tới php nữa

Trung Kien viết 15:33 ngày 01/10/2018

Vấn đề của mình đang thắc mắc, đấy là khi chạy bằng apache của xampp, thì đúng ra theo vòng lặp for, phải tải hết json trong các page thuộc grade 1 rồi mới sang 2. Nhưng apache vẫn tự tao ra các file nằm trong grade 2 khi mà chưa tải hay tạo xong các file nằm trong grade 1

viết 15:36 ngày 01/10/2018

sao bạn k lấy hết về rồi down 1 thể luôn?

Trung Kien viết 15:42 ngày 01/10/2018

Thật ra vấn đề hiện nay không phải là làm sao để tải về hêta. Vì mình đã chuyển sang code lại bằng java và chạy xong rồi. Vấn đề chủ yếu là mình đang không hiểu tại sao có hiện tượng như thế.

viết 15:34 ngày 01/10/2018

mình đưa phương án vậy để dễ debug ấy bạn.
Download trong php còn phụ thuộc vào server nữa, server đặt timeout trong lúc request chẳng hạn, bạn vượt quá timeout là toi luôn.
Thế nên mới cần chia ra như vậy để dễ xác định xem vđ ở đâu.

Bài liên quan
0