如何在页面加载10秒后调用PHP中的函数(不使用HTML)

Fer*_*ero 10 php

有没有办法在PHP加载页面10秒后调用函数.(不使用HTML.)

Ran*_*ell 21

PHP是一种服务器端脚本语言. 如果您需要检查客户端是否已加载某些内容,则需要使用JavaScript等客户端脚本语言.

您可能需要使用jQuery来简化操作.

jQuery是一个快速而简洁的JavaScript库,它简化了HTML文档遍历,事件处理,动画和Ajax交互,以实现快速Web开发.jQuery旨在改变您编写JavaScript的方式.

首先,下载jQuery.在HTML的head标记中,添加以下内容:

<script type="text/javascript" src="jquery.js"></script>          
<script type="text/javascript">

// Check if the page has loaded completely                                         
$(document).ready( function() { 
    setTimeout( function() { 
        $('#some_id').load('index.php'); 
    }, 10000); 
}); 
</script> 
Run Code Online (Sandbox Code Playgroud)

在HTML的正文中,添加以下内容:

<div id="some_id"></div>
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 13

不是,不是.页面加载后10秒(至少)PHP脚本完成后10秒,即它不再运行(除了尝试保持连接打开的技巧,我认为这种技巧在一段时间内不会起作用10秒)!

因此,您需要cron在服务器端安排作业在10秒内启动,或者您需要使用AJAX从网站回调.

  • 啊好的,我已经编辑了你的问题以反映这一点,但原来保持完整,否则不是所有的回答都会有意义! (2认同)

Pau*_*xon 9

如果我将您的问题解释为"我的页面需要很长时间才能生成,现在我可以在生成时每隔10秒调用一次PHP函数",那么有几种方法可以解决这个问题...

为你的循环计时,在工作10秒后做点什么......

$nexttick=time()+10;
$active=true;

while ($active)
{
    if (time()>=$nexttick)
    {
        my_tick_function();
        $nexttick=time()+10;
    }

    //now do some useful processing
    $active=do_some_work();
}
Run Code Online (Sandbox Code Playgroud)

可以使用这样的技术来实现长时间运行的进度表,通过让"tick"函数输出一些javascript来更新代表进度表的HTML.

使用pcntl_alarm ...

或者,如果您在PHP的构建中启用了Process Control支持,则可能会在经过一定时间后使用pcntl_alarm来调用信号处理程序.

使用刻度线......

您可以使用declare构造和register_tick_function让PHP引擎每x'ticks'调用您的函数.从手册:

tick是由声明块内的解析器执行的每N个低级别可勾选语句发生的事件.在声明块的指令部分中使用ticks = N指定N的值.


war*_*ech 8

这看起来很怪异,但如果您想在不触及HTML/JS的情况下在PHP中执行此操作,可能就是您正在寻找的内容:

<?php
your_website_here();

flush(); //this sends the output to the client. You may also need ob_flush();
sleep(10); //wait 10 seconds

your_func_here();
?>
Run Code Online (Sandbox Code Playgroud)

以上在理论上是可行的,但在实践中它会导致非常消耗内存的app.所以要警告.

请不要贬低我,这只是一个理论上的争议.


Fer*_*ero 1

这段代码有效。根据兰德尔的回答进行编辑。

<script type="text/javascript" src="jquery.js"></script>          
<script type="text/javascript">

$(document).ready(function()
  {
    setTimeout(function()    {   $('#some_id').load('index.php');    }, 10000);
  });
</script>  
Run Code Online (Sandbox Code Playgroud)

感谢兰德尔