⑴ 关于php的sleep()函数导致的问题
但是同时两次访问index1.php,第二个需要等第一个完成之后再等20秒才能正常显示,即第二个页面需要等40s才能正常显示
--------------------------------------
你是怎么同时2次访问index1.php的?
即第二个页面需要等40s才能正常显示
------------------------------------------
第二个页面也是index1?
⑵ php sleep 会不会把服务器卡死
sleep不占用系统资源,它会把cpu的控制权交换给内核,内核会再schele到另一个进程。
这种简单的事情,你写个while (true) sleep(1)的程序然后top一下就能判断的。
⑶ PHP当中的 sleep()函数问题
同学,你要先理解php是在服务器端执行的
你的这个结果,却是被客户端浏览器解析的
所以,服务器执行了 输出1 睡眠3 输出2 用时3秒
然后返回了最终的结果
而,同时,浏览器是不能用html来动态显示内容的
你需要使用ajax
处理逻辑是:
ajax 控制js向服务器发报,服务器返回显示时间的页面,页面用js动态加入div中
这个过程用js控制,每3秒自调用一次
即是在js function中添加setTimeout( "方法名() ", 3000);
当然,还有另外一个方法,上面的方法能获得的是服务器端的时间,下面这个则是客户端的时间,处理逻辑如下:
和上个方法一样,写一个js的3秒间隔自调用函数,然后该函数会改变某个div的值,值显示为当前时间。
其实还有个方法,使用js每隔3秒来刷新当前页面。
但无论哪种方法 都用不到sleep
⑷ php discuz的定时任务是什么原理怎么实现的求高手解答
php中定时计划任务的实现原理:
当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。
示例代码:
<?php
ignore_user_abort(true);set_time_limit(0);
date_default_timezone_set('PRC'); // 切换到中国的时间
$run_time = strtotime('+1 day'); // 定时任务第一次执行的时间是明天的这个时候
$interval = 3600*12; // 每12个小时执行一次
if(!file_exists(dirname(__FILE__).'/cron-run')) exit(); // 在目录下存放一个cron-run文件,如果这个文件不存在,说明已经在执行过程中了,该任务就不能再激活,执行第二次,否则这个文件被多次访问的话,服务器就要崩溃掉了
do {
if(!file_exists(dirname(__FILE__).'/cron-switch')) break; // 如果不存在cron-switch这个文件,就停止执行,这是一个开关的作用
$gmt_time = microtime(true); // 当前的运行时间,精确到0.0001秒
$loop = isset($loop) && $loop ? $loop : $run_time - $gmt_time; // 这里处理是为了确定还要等多久才开始第一次执行任务,$loop就是要等多久才执行的时间间隔
$loop = $loop > 0 ? $loop : 0;
if(!$loop) break; // 如果循环的间隔为零,则停止
sleep($loop);
// ...
// 执行某些代码
// ...
@unlink(dirname(__FILE__).'/cron-run'); // 这里就是通过删除cron-run来告诉程序,这个定时任务已经在执行过程中,不能再执行一个新的同样的任务
$loop = $interval;
} while(true);
⑸ PHP中的sleep用法
<?php echo date('h:i:s') . "<br />"; //暂停 10 秒
sleep(10);//重新开始
echo date('h:i:s'); ?>
输出:
15:00:08 15:00:18
⑹ php中sleep()函数会不会大量销号系统内存或者CPU
会。
正常情况下php以最快速度执行完脚本,将执行结果传给浏览器。你要考虑有很多用户访问你网站的情况,因为执行脚本的时候被sleep了,导致每个用户浏览网页的时候php都需要更长的时间去执行你的脚本,而脚本执行完毕之前内存是一直被php引擎占用的。所以当访问用户多的时候,就会导致有很多php引擎的实例同时运行,占用很多内存,但是这些php引擎却受到脚本的指使而在那边sleep(说得粗俗一点就是占着茅坑不拉屎)(正常情况下是执行完以后内存就释放了)。就好像八行道的大马路,如果只有一个司机车子停在中间然后睡觉,其他道路暂时还能通;但是如果有八辆车的司机并排停在路中间睡觉,这马路就不要想畅通了
cpu的话……好像影响不大,最多就是操作系统在调度进程线程的时候要多检查几个而已,没感觉。
⑺ php是单线程的,那么sleep函数是如何实现自动结束挂起的
sleep函数会导致当前服务的进程睡眠挂起。注意是当前服务的进程。因为服务器可以配置多个php进程同时提供解析服务。
另外PHP也可以使用pthread扩展实现多线程编程。