【问题标题】:On form submit background function php running在表单提交后台功能php运行
【发布时间】:2009-05-22 17:39:17
【问题描述】:

我正在寻找一种在表单提交时启动函数的方法,它不会让浏览器窗口等待结果。

示例: 用户填写表格并按提交,通过 javascript 从表格中获取的数据进入数据库,php 中的一个需要几秒钟的函数将启动,但我不希望用户等待该函数的结束。我希望能够将他带到另一个页面并让该功能在服务器端执行其操作。

有什么想法吗?

谢谢


感谢大家的回复...

我得到了 ajax 部分。但是我不能调用 ajax 并让浏览器移动到另一个页面。

这就是我想要的。

-用户填写表单并提交 - 传递给数据库的表单结果 -long烦人的进程功能启动 -用户继续访问站点的其余部分,与“长时间烦人的进程功能”的状态无关

顺便说一句,在有人建议之前。不,不能通过cron作业来完成

【问题讨论】:

    标签: php javascript background server-side


    【解决方案1】:

    使用 AJAX 调用 php 脚本,并在脚本顶部打开 ignore_ user_ abort

    ignore_user_abort(true);
    

    这样,如果他们离开页面,脚本将继续在后台运行。你也可以使用

    set_time_limit(0);
    

    设置时间限制,如果您知道脚本需要一段时间才能完成,这很有用。

    【讨论】:

      【解决方案2】:

      最常用的方法是:

      exec("$COMMAND > /dev/null 2>&1 &");
      

      【讨论】:

      • 如何在我的代码中设置它? ?
      • hugo,即服务器端代码,即。响应浏览器请求的代码,驻留在服务器上。您正在谈论客户端代码(可能是 javascript),在这种情况下,请参阅下面与 AJAX 相关的答案
      • 这也是一种选择,虽然它通常是 Web 开发人员在创建“日常”应用程序时尽量避免的一种选择。让 PHP 脚本执行 shell 命令可能会带来巨大的安全风险。例如,如果“command”是“cat”,并且允许用户向 cat 提供文件,则可以执行cat /etc/passwd,这可能是不可取的!
      • 谢谢...我会从 php 中查看这个 exec()... 我想这正是我想要的
      【解决方案3】:

      啊,好吧,那么您实际上是在问,PHP 是否支持线程,一般的答案是否定的......但是......

      您可以执行一些技巧来模仿这种行为,其中一个在上面突出显示并涉及到服务器上的单独进程,这可以通过多种方式实现,包括:

      exec()
      

      方法。你也可以看看这里;

      PHP threading

      我还看到有人试图在脚本中途强制刷新输出缓冲区,试图将响应强制返回给客户端,我不知道这种方法有多成功,但也许其他人会有一些关于那个。

      【讨论】:

        【解决方案4】:

        这正是 AJAX(异步 JavaScript + XML 的简写)的用途;

        AJAX Information

        它允许您使用客户端代码进行编码,并向您的服务器发送异步请求,这样用户的浏览器就不会被整个页面请求中断。

        网上有很多与 AJAX 相关的信息,所以请深吸一口气,开始搜索吧!

        【讨论】:

          【解决方案5】:

          听起来您想使用 AJAX(异步 Javascript 和 XML - google)必须提供的一些功能。

          基本上,您将拥有一个包含内容的页面。当用户单击按钮时,javascript 将用于将数据 POST 到服务器并开始处理。同时,该 javascript 可能会从服务器加载页面并显示它(例如,加载数据,然后用该新页面替换 DIV 的内容。)

          这种种类是 AJAX 背后的前提,当您的网页同时执行多项操作时,您随处可见。

          值得注意:这并不意味着脚本“在服务器的后台”运行。您的网络浏览器仍在与网络服务器保持连接——这意味着代码在客户端端的“后台”中运行。 “后台”实际上是指“与其他 HTTP 请求并行处理 HTTP 请求,以给人一种‘后台’运行进程的感觉”

          【讨论】:

            猜你喜欢
            • 2011-06-05
            • 1970-01-01
            • 2020-09-23
            • 2020-02-18
            • 2014-03-04
            • 1970-01-01
            • 2010-11-17
            相关资源
            最近更新 更多