2010-10-11 29 views
12

Tôi đang thực hiện một yêu cầu lớn đối với các máy chủ phát sáng để thực hiện thay đổi hàng loạt siêu dữ liệu trong video của mình. Nó có vẻ như nó chỉ làm cho nó thông qua 1000 lặp đi lặp lại và sau đó dừng lại - bất cứ ai có thể giúp đỡ trong việc điều chỉnh mã này để ngăn chặn một thời gian chờ xảy ra? Nó cần tạo khoảng 7000/8000 lần lặp.Ngăn thời gian chờ trong khi yêu cầu lớn trong PHP

<?php 
include 'echove.php'; 

$e = new Echove(
    'xxxxx', 
    'xxxxx' 
); 

// Read Video IDs 
# Define our parameters 
$params = array(
    'fields'   => 'id,referenceId' 

); 

# Make our API call 
$videos = $e->findAll('video', $params); 


    //print_r($videos); 
    foreach ($videos as $video) { 

     //print_r($video); 
     $ref_id = $video->referenceId; 
     $vid_id = $video->id; 

     switch ($ref_id) { 
      case "": 
       $metaData = array(
        'id' => $vid_id, 
        'referenceId' => $vid_id 
       ); 

       # Update a video with the new meta data 
       $e->update('video', $metaData);     
       echo "$vid_id updated sucessfully!<br />"; 
       break; 
      default: 
       echo "$ref_id was not updated. <br />"; 
       break; 
     } 
    } 
?> 

Cảm ơn!

+0

Cũng giống như một lời cảnh báo nếu bạn quyết định sử dụng 'set_time_limit' trên trình duyệt dựa trên ứng dụng thì trình duyệt của bạn có thể sẽ hết thời gian chờ trước khi bạn nhận được bất kỳ phản hồi nào. Không thực sự là một câu trả lời, thông tin chỉ là hữu ích;) – Catharsis

Trả lời

29

Thử chức năng set_time_limit(). Gọi set_time_limit(0) sẽ xóa mọi giới hạn thời gian để thực thi tập lệnh.

+0

Cảm ơn, điều này đã làm việc hoàn hảo. –

+7

Xem ra, firefox "ghi đè" điều này, với tùy chọn 'network.http.keep-alive.timeout' – Baronth

0

Cũng sử dụng ignore_user_abort() để bỏ qua trình duyệt bị hủy. Tập lệnh sẽ tiếp tục chạy ngay cả khi bạn đóng trình duyệt (sử dụng cẩn thận).

1

Hãy thử gửi 'Trạng thái: 102 Xử lý' mỗi lúc và sau đó để ngăn trình duyệt hết thời gian chờ (đặt cược tốt nhất của bạn là khoảng 15 đến 30 giây ở giữa). Sau khi yêu cầu được xử lý, bạn có thể gửi phản hồi cuối cùng.

Trình duyệt không nên hết thời gian theo cách này.

+0

Tính năng này có hoạt động không? Tôi rất muốn sử dụng nó, nhưng như là một tiêu đề CGI bạn không được phép gửi 'Status:' nhiều hơn một lần. Và phiên bản HTTP của tiêu đề CGI này như thế nào (ví dụ: "Xử lý HTTP/1.2 102") đến trình duyệt? Người đầu tiên sẽ được gửi ngay lập tức? Những người tiếp theo thậm chí có thể/hợp pháp? –

Các vấn đề liên quan