PHP 8.3 的 sleep() 函数以秒为单位暂停脚本执行,参数须为整数,成功返回0,中断则返回剩余秒数;不支持小数,最小精度1秒;Web中受 max_execution_time 限制且占用 worker 进程,CLI 中更适用。

PHP 8.3 中的 sleep() 函数和之前版本一样,直接暂停当前脚本的执行(以秒为单位),不需要额外配置或语法变化。
sleep() 的基本用法
它会让当前 PHP 进程(比如一个 Web 请求或 CLI 脚本)停止运行指定的秒数,期间不消耗 CPU,也不执行后续代码。
- 参数必须是整数,表示暂停的秒数(如
sleep(3)暂停 3 秒) - 返回值为
0表示成功;如果被信号中断(如 Unix 系统收到 SIGALRM),则返回剩余未休眠的秒数(PHP 8.3 仍保持此行为) - 在 Web 环境中使用需注意:超时时间不能超过
max_execution_time设置,否则会被强制终止
与 usleep() 和 time_nanosleep() 的区别
如果需要更精细的暂停(比如毫秒或微秒级),sleep() 不够用:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
-
usleep(500000)暂停 50 万微秒(即 0.5 秒) -
time_nanosleep(0, 500000000)可实现纳秒级控制(第一个参数是秒,第二个是纳秒) -
sleep()最小单位是 1 秒,无法传小数或浮点数(会自动向下取整)
Web 环境中的注意事项
在 Apache/Nginx + PHP-FPM 场景下,sleep() 会占用一个 worker 进程,影响并发能力:
立即学习“PHP免费学习笔记(深入)”;
- 不要在响应用户请求的关键路径中长时间 sleep(如
sleep(10)) - 若需延迟响应,考虑用前端定时器 + AJAX 轮询,或使用消息队列异步处理
- CLI 脚本中使用更安全,比如定时任务、批量处理间隔控制
简单示例
以下代码在 CLI 下运行会输出两行,间隔 2 秒:
```phpecho "开始\n";
sleep(2);
echo "2 秒后继续\n";
?>
```


















