Hướng dẫn dùng usleep trong PHP

Bất kỳ cơ quan nào có thể giải thích cho tôi sự khác biệt giữa sleep()usleep()trong PHP là gì.

Tôi đã hướng dẫn sử dụng các tập lệnh sau để thực hiện kéo dài ứng dụng trò chuyện nhưng trong tập lệnh này, tôi nhận được hiệu ứng tương tự bằng cách sử dụng usleep(25000);hoặc khôngusleep(25000);

page1.php




page2.php


24 hữu ích 2 bình luận 34k xem chia sẻ

answer

49

Hướng dẫn dùng usleep trong PHP

Một nơi mà nó được sử dụng là tạo ra sự chậm trễ .

Giả sử bạn đã xây dựng một trình thu thập thông tin sử dụng curl/ file_get_contentsđể lấy các trang từ xa. Bây giờ bạn không muốn bắn phá máy chủ từ xa với quá nhiều yêu cầu trong thời gian ngắn. Vì vậy, bạn giới thiệu một sự chậm trễ giữa các yêu cầu liên tiếp.

sleeplấy đối số trong vài giây, người bạn của nó usleeplấy đối số trong micro giây và phù hợp hơn trong một số trường hợp.

49 hữu ích 4 bình luận chia sẻ

answer

31

Hướng dẫn dùng usleep trong PHP

Một ví dụ khác: Bạn đang chạy một số loại quy trình hàng loạt sử dụng nhiều tài nguyên. Có thể bạn đang xem cơ sở dữ liệu gồm 9.000.000 tên sách và cập nhật khoảng 10% trong số đó. Quá trình đó phải chạy vào giữa ngày, nhưng có quá nhiều bản cập nhật cần được thực hiện khiến việc chạy chương trình hàng loạt của bạn sẽ kéo máy chủ cơ sở dữ liệu xuống thu thập thông tin cho những người dùng khác.

Vì vậy, bạn sửa đổi quy trình hàng loạt để gửi, chẳng hạn như 1000 bản cập nhật, sau đó sleeptrong 5 giây để máy chủ cơ sở dữ liệu có cơ hội hoàn tất xử lý bất kỳ yêu cầu nào từ những người dùng khác đã sao lưu.

31 hữu ích 0 bình luận chia sẻ

answer

24

Hướng dẫn dùng usleep trong PHP

Đây là đoạn trích về cách tôi sử dụng sleeptrong một trong các dự án của mình:

foreach($addresses as $address)
{
  $url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
  $result = file_get_contents($url);
  $geo = json_decode($result, TRUE);

  // Do stuff with $geo

  sleep(1);
}

Trong trường hợp này sleepgiúp tôi tránh bị Google maps chặn, vì tôi đang gửi quá nhiều yêu cầu đến máy chủ.

24 hữu ích 0 bình luận chia sẻ

answer

9

Hướng dẫn dùng usleep trong PHP

Câu hỏi cũ mà tôi biết, nhưng một lý do khác để sử dụng u / sleep có thể là khi bạn đang viết mã bảo mật / mật mã, chẳng hạn như tập lệnh xác thực. Một vài ví dụ:

  1. Bạn có thể muốn giảm hiệu quả của một cuộc tấn công vũ phu tiềm ẩn bằng cách làm cho tập lệnh đăng nhập của bạn chậm có chủ đích, đặc biệt là sau một vài lần thử không thành công.
  2. Ngoài ra, bạn có thể muốn thêm độ trễ nhân tạo trong quá trình mã hóa để giảm thiểu các cuộc tấn công định thời gian . Tôi biết rằng cơ hội rất nhỏ là bạn sẽ viết mã mã hóa chuyên sâu như vậy bằng một ngôn ngữ như PHP, nhưng tôi nghĩ vẫn còn giá trị.

BIÊN TẬP

Sử dụng u / sleep để chống lại các cuộc tấn công định thời không phải là một giải pháp tốt. Bạn vẫn có thể lấy dữ liệu quan trọng trong một cuộc tấn công định thời, bạn chỉ cần thêm mẫu để lọc ra nhiễu mà u / sleep thêm vào.

Bạn có thể tìm thêm thông tin về chủ đề này trong: Một giấc ngủ ngẫu nhiên có thể ngăn chặn các cuộc tấn công về thời gian không?

9 hữu ích 2 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Bạn có thể sử dụng chế độ ngủ để tạm dừng thực thi tập lệnh ... chẳng hạn như để trì hoãn cuộc gọi AJAX ở phía máy chủ hoặc triển khai trình quan sát. Bạn cũng có thể sử dụng nó để mô phỏng sự chậm trễ.

Tôi cũng sử dụng nó để trì hoãn sendmail () & co. .

Ai đó sử dụng use sleep () để ngăn DoS và đăng nhập brutefoces, tôi không đồng ý vì trong điều này bạn cần thêm một số kiểm tra để ngăn người dùng chạy nhiều lần.

Cũng kiểm tra usleep .

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Tôi đã phải sử dụng nó gần đây khi tôi đang sử dụng API vị trí địa lý của Google. Mọi địa chỉ trong vòng lặp đều cần thiết để gọi đến máy chủ của Google nên cần một chút thời gian để nhận được phản hồi. Tôi đã từng usleep(500000)cho mọi thứ liên quan đủ thời gian.

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Tôi thường không sử dụng nó để phục vụ các trang web, nhưng nó hữu ích cho các tập lệnh dòng lệnh.

$ready = false;
do {
  $ready = some_monitor_function();
  sleep(2);
} while (!$ready);

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Bài viết siêu cũ, nhưng tôi nghĩ tôi cũng sẽ bình luận. Gần đây tôi đã phải kiểm tra quá trình chạy RẤT lâu đã tạo ra một số tệp. Vì vậy, tôi đã tạo một hàm lặp qua một hàm cURL. Nếu tệp tôi đang tìm kiếm không tồn tại, tôi tạm dừng tệp php và kiểm tra lại một chút:

function remoteFileExists() {
    $curl = curl_init('domain.com/file.ext');

    //don't fetch the actual page, you only want to check the connection is ok
    curl_setopt($curl, CURLOPT_NOBODY, true);

    //do request
    $result = curl_exec($curl);

    //if request did not fail
    if ($result !== false) {
        //if request was ok, check response code
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  

        if ($statusCode == 404) {
              sleep(7);
              remoteFileExists();
        }
        else{
            echo 'exists'; 
        }
    }

    curl_close($curl);

}

echo remoteFileExists();

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Một cách khác để sử dụng nó: nếu bạn muốn thực thi cronjob thường xuyên hơn ở đó mỗi phút. Tôi sử dụng mã sau cho việc này:

sleep(30);
include 'cronjob.php';

Tôi gọi tệp này và cronjob.php mỗi phút.

1 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng usleep trong PHP

Đây là một trường hợp hơi kỳ quặc ... điều chỉnh quá trình truyền tệp.

Trong một dịch vụ truyền tệp mà chúng tôi đã chạy cách đây khá lâu, các tệp được phân phát từ các máy chủ có đường lên 10Mbps. Để ngăn mạng bị sa lầy, tập lệnh tải xuống đã theo dõi số lượng người dùng đang tải xuống cùng một lúc và sau đó tính toán số byte nó có thể gửi mỗi giây cho mỗi người dùng. Nó sẽ gửi một phần của số tiền này, sau đó ngủ một lát (tôi nghĩ là 1/4 giây) rồi gửi thêm ... vv.

Bằng cách này, các máy chủ chạy liên tục với tốc độ khoảng 9,5Mbps mà không gặp vấn đề về bão hòa đường lên ... và luôn tự động điều chỉnh tốc độ tải xuống.

Tôi sẽ không làm theo cách này, hoặc trong PHP, bây giờ ... nhưng nó hoạt động rất tốt vào thời điểm đó.

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng usleep trong PHP

Một trong những ứng dụng của nó là, nếu tôi đang gửi thư bằng script tới hơn 100 khách hàng thì thao tác này sẽ mất tối đa 1-2 giây, do đó hầu hết các trang web như hotmail và yahoo đều coi nó là thư rác, vì vậy để tránh điều này, chúng ta cần sử dụng một số chậm trễ trong thực thi sau mỗi lần gửi thư

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng usleep trong PHP

Trong số những người khác: bạn đang thử nghiệm một ứng dụng web thực hiện các yêu cầu đồng bộ (cuộc gọi AJAX, tải hình ảnh lười biếng, ...)

Bạn đang thử nghiệm nó cục bộ nên phản hồi ngay lập tức vì chỉ có một người dùng (bạn) và không có độ trễ mạng.

Việc sử dụng sleepcho phép bạn xem / kiểm tra cách ứng dụng web hoạt động khi tải và mạng gây ra sự chậm trễ đối với các yêu cầu.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng usleep trong PHP

Một ví dụ về mã giả nhanh chóng về nơi bạn có thể không muốn nhận hàng triệu email cảnh báo cho một sự kiện duy nhất nhưng bạn muốn tập lệnh của mình tiếp tục chạy.

  if CheckSystemCPU() > 95  
        SendMeAnEmail()
        sleep(1800)
  fi

0 hữu ích 0 bình luận chia sẻ