Chức năng ngủ trong PHP là gì?

Khi bạn muốn tạm dừng thực thi trong tập lệnh của mình, có hai cách để bạn triển khai mã. Một số người (rất may là rất ít) chọn tùy chọn đầu tiên và viết mã như thế này

 time()) {
        // do nothing
    }

    echo "Done.\n";
?>

Trong khi nó hoạt động, có hai vấn đề với nó. Đầu tiên, time() có độ chính xác rất thấp, chỉ trả về số giây đã trôi qua, điều này khiến cho toàn bộ điều này khá mơ hồ. Thứ hai, PHP phải ngồi đó lặp đi lặp lại hàng nghìn lần trong khi chờ đợi, về cơ bản không làm gì cả. Một giải pháp tốt hơn nhiều là sử dụng một trong hai chức năng ngủ tập lệnh, sleep() và usleep(), lấy lượng thời gian để tạm dừng thực thi làm tham số duy nhất của chúng

Sự khác biệt giữa sleep() và usleep() là sleep() lấy một số giây làm tham số, trong khi usleep() lấy một số micro giây - một phần triệu giây - làm tham số. Sử dụng một trong số chúng chính xác hơn nhiều so với vòng lặp time() trước đó và cả hai đều có ưu điểm của chúng - sleep() sẽ tốt hơn nếu bạn không cần độ chính xác và usleep() sẽ tốt hơn nếu bạn cần. Đơn giản, thực sự

Kịch bản trên có thể được viết lại như thế này


Hoặc cái này


Lưu ý rằng thời gian thực thi tập lệnh tối đa mặc định là 30 giây, nhưng bạn có thể sử dụng chế độ ngủ() và usleep() để làm cho tập lệnh của bạn tiếp tục lâu hơn thế vì về mặt kỹ thuật, PHP không có quyền kiểm soát trong quá trình vận hành ở chế độ ngủ

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng hàm sleep hoặc usleep trong PHP để tạm dừng tập lệnh

Chức năng ngủ trong PHP là gì?

Khi viết các tập lệnh PHP của bạn, có thể đôi khi bạn cảm thấy muốn tạm dừng/ngủ tập lệnh

Tạm dừng thực thi tập lệnh rất hữu ích trong các tình huống khác nhau. Một ví dụ về cách sử dụng là khi thực hiện một số lượng lớn các yêu cầu mạng, bạn có thể muốn ngủ tập lệnh PHP của mình để ngăn nó tràn vào mạng

Bạn cũng có thể sử dụng nó để ngăn tập lệnh tiêu thụ một lượng tài nguyên CPU bất thường. Sử dụng chức năng ngủ giữa các tác vụ có thể ngăn những tác vụ hoàn thành nhanh nhanh chóng áp đảo CPU

Hai cách chính mà bạn có thể ngủ tập lệnh trong PHP là sử dụng “sleep()” hoặc “usleep()“. Trong các phần sau, chúng tôi sẽ đề cập đến cả hai

Một lời giải thích nhanh giữa những điều này là chức năng “sleep()” hoạt động trong vài giây và “usleep()” hoạt động trong micro giây

Hàm PHP ngủ ()

Sử dụng chức năng ngủ của PHP, có thể tạm dừng việc thực thi tập lệnh trong một số giây được chỉ định

Hàm chỉ nhận một tham số duy nhất có tên là “

0“, trong đó bạn đặt thời gian ngủ tính bằng giây

Dưới đây bạn có thể xem định nghĩa cho hàm sleep() trong PHP. Bạn có thể thấy tham số của nó được lấy dưới dạng số nguyên và nó trả về một số nguyên

sleep(int $seconds): int

Hàm sleep() sẽ trả về 0 (

2) khi nó ngủ thành công. Tuy nhiên, nếu ngủ tập lệnh không thành công, nó sẽ trả về giá trị Boolean
3

Vì hàm này có thể trả về

2 hoặc
3, hãy đảm bảo bạn sử dụng (
6) khi kiểm tra giá trị trả về. Mặt khác, kiểu tung hứng của PHP sẽ coi 0 và false là giống nhau

Xin lưu ý rằng giây không thể là một phần của giây. Nếu bạn cần một phần giây, hãy sử dụng hàm

7

Ví dụ sử dụng hàm sleep() trong PHP

Bây giờ chúng ta đã biết cú pháp của hàm sleep(), hãy viết một đoạn script PHP nhanh để bạn có thể thấy nó hoạt động như thế nào

Chúng tôi sẽ sử dụng hàm echo của PHP để in thời gian hiện tại cho ví dụ này. Chúng ta có thể truy xuất thời gian hiện tại nhờ hàm

8. Sử dụng tùy chọn “
9” sẽ nhận được giờ, phút và giây hiện tại

Chúng tôi bắt đầu bằng cách in chuỗi “

Time before sleep: 10:17:54 
Time after sleep: 10:17:59
0“, nối thời gian hiện tại và cuối cùng, ký tự dòng mới (
Time before sleep: 10:17:54 
Time after sleep: 10:17:59
1)

Sau đó, chúng tôi sử dụng hàm sleep() của PHP để sử dụng, đặt tham số duy nhất của nó thành “

Time before sleep: 10:17:54 
Time after sleep: 10:17:59
3” để ngủ tập lệnh trong 5 giây

Cuối cùng, để cho bạn thấy tập lệnh đã ngủ, chúng tôi in văn bản “

Time before sleep: 10:17:54 
Time after sleep: 10:17:59
4“, nối thời gian hiện tại

Sau khi chạy tập lệnh này, bạn sẽ thấy kết quả tương tự như những gì chúng tôi đã hiển thị bên dưới

Với sự khác biệt về thời gian, bạn có thể thấy chức năng ngủ đã tạm dừng việc thực thi tập lệnh như thế nào

Time before sleep: 10:17:54 
Time after sleep: 10:17:59

Hàm usleep() trong PHP

Nếu bạn cần tạm dừng việc thực thi tập lệnh PHP của mình trong thời gian ngắn hơn một giây, bạn sẽ cần sử dụng hàm usleep()

Với chức năng này, bạn có thể chỉ định số micro giây mà bạn muốn tập lệnh ở chế độ ngủ. Một micro giây là một phần triệu giây

Ví dụ: nếu bạn muốn ngủ tập lệnh PHP của mình trong một phần tư giây (

Time before sleep: 10:17:54 
Time after sleep: 10:17:59
5), bạn sẽ sử dụng giá trị
Time before sleep: 10:17:54 
Time after sleep: 10:17:59
6

Dưới đây, bạn có thể xem định nghĩa cho hàm usleep() trong PHP. Nó có một tham số duy nhất phải luôn là số nguyên và nó trả về một số nguyên

usleep(int $microseconds):int

Giống như chức năng ngủ,

7 sẽ trả về
2 khi nó ngủ thành công. Tuy nhiên, nếu chức năng không chuyển sang chế độ ngủ trong suốt thời gian đó, nó sẽ trả về
3

Xin lưu ý rằng việc sử dụng thời gian ngủ ngắn dài hơn “

usleep(int $microseconds):int
0” (1 giây) có thể không được hệ thống máy chủ hỗ trợ

Ví dụ về việc sử dụng hàm usleep()

Đối với ví dụ này, chúng tôi sẽ sử dụng hàm usleep() của PHP để ngủ tập lệnh của chúng tôi trong 250000 micro giây (một phần tư giây)

Chúng tôi sẽ cần sử dụng thời gian được cung cấp bởi chức năng “

usleep(int $microseconds):int
1” để theo dõi điều này. Điều này cung cấp cho chúng tôi dấu thời gian Unix hiện tại tính bằng micro giây

Bắt đầu tập lệnh bằng cách lấy thời gian vi mô hiện tại và lưu trữ nó trong biến “

usleep(int $microseconds):int
2”

Sau đó, chúng ta có thể sử dụng hàm usleep(), chuyển vào

Time before sleep: 10:17:54 
Time after sleep: 10:17:59
6 để ngủ tập lệnh trong khoảng thời gian
Time before sleep: 10:17:54 
Time after sleep: 10:17:59
6 micro giây

Sau khi ngủ, chúng tôi nhận lại thời gian vi mô và lưu trữ nó trong biến “

usleep(int $microseconds):int
6”

Sau đó, chúng tôi tính toán tổng thời gian thực hiện bằng cách lấy thời gian kết thúc trừ đi thời gian bắt đầu và lưu trữ nó trong biến “

usleep(int $microseconds):int
7”

Cuối cùng, chúng tôi sử dụng hàm echo để xuất tập lệnh mất bao lâu để chạy. Điều này sẽ cho chúng tôi thấy tập lệnh của chúng tôi ngủ như thế nào trong khi thực thi

Dưới đây là một ví dụ về những gì PHP sẽ in sau khi chạy ví dụ trên

Bạn sẽ nhận thấy rằng thời gian trả về không chính xác là thời gian ngủ vì các chức năng không hoàn thành ngay lập tức

0.25010299682617

Phần kết luận

Xuyên suốt hướng dẫn này, chúng tôi đã chỉ cho bạn hai cách để bạn có thể tạm dừng việc thực thi tập lệnh PHP của mình

Hai chức năng chúng tôi khám phá trong hướng dẫn này là các chức năng sleep() của PHP, và usleep(). Cả hai đều có cách sử dụng cụ thể nhưng sẽ tạm dừng việc thực thi tập lệnh

Làm cách nào để đặt chế độ ngủ trong PHP?

Để trì hoãn việc thực thi chương trình trong một phần giây, hãy sử dụng usleep() vì hàm sleep() yêu cầu int . Ví dụ: ngủ (0. 25) sẽ tạm dừng thực thi chương trình trong 0 giây.

PHP có chặn giấc ngủ không?

PHP Script mà bạn đang sử dụng chế độ ngủ() không nên sử dụng phiên, nếu không nó sẽ chặn tất cả các Yêu cầu khác .

Có chức năng chờ trong PHP không?

Chức năng chờ tạm dừng thực thi quy trình hiện tại cho đến khi một phần tử con đã thoát hoặc cho đến khi tín hiệu được gửi có hành động là chấm dứt quy trình hiện tại hoặc gọi chức năng xử lý tín hiệu

Làm cách nào để giảm thời gian thực hiện trong PHP?

Các cách thay đổi thời gian thực thi chương trình PHP . tìm kiếm php. ini cho chỉ thị max_execution_time và chỉnh sửa giá trị mặc định của nó theo yêu cầu. Sử dụng hàm ini_set() trong chương trình PHP bằng cách chỉ định php. Use PHP function set_time_limit() that accepts execution time limit in seconds as its argument. Search the php. ini file for a max_execution_time directive and edit its default value as required. Use ini_set() function in a PHP program by specifying php.