如何在后台运行php文件

如何在后台运行php文件,php,exec,shell-exec,proc-open,Php,Exec,Shell Exec,Proc Open,可能重复: 我必须建立一个大的电子邮件列表。一切都很好,但当我提交表单页面时,直到所有电子邮件都发送完毕。所以我希望此电子邮件发送脚本在后台运行。请注意,该脚本正在后台运行。 我不能使用Ajax 我想要像。。proc_open、exec、shell_exec..您可以拥有cron作业,该作业将运行php脚本,该脚本将从数据库获取队列并发送电子邮件 在主脚本中,您只需要将电子邮件添加到队列中 只有当您需要进度条时,我才会使用ajax。使用ajax解决方案,您需要保持窗口打开直到结束。您可以构建一

可能重复:

我必须建立一个大的电子邮件列表。一切都很好,但当我提交表单页面时,直到所有电子邮件都发送完毕。所以我希望此电子邮件发送脚本在后台运行。请注意,该脚本正在后台运行。 我不能使用Ajax


我想要像。。proc_open、exec、shell_exec..

您可以拥有cron作业,该作业将运行php脚本,该脚本将从数据库获取队列并发送电子邮件

在主脚本中,您只需要将电子邮件添加到队列中


只有当您需要进度条时,我才会使用ajax。使用ajax解决方案,您需要保持窗口打开直到结束。

您可以构建一个调用php脚本的ajax调用。这样,在满足请求的同时,您的站点仍然可以运行。完成后,AJAX将返回,您可以向用户显示messagebox

有关更多信息,请检查,如果您了解AJAX是什么以及它的功能,那么将其与请求一起使用将是最好的选择。您可以使用javascript发送请求,甚至可以向用户报告进度(这可能需要一些额外的工作)


如果您发现ajax太难,请在iframe中运行脚本。这不是最优雅的方法,而是最简单的方法

使用
AJAX
提交表单,并在Div中更新进度,例如-将脚本运行时的当前状态“complete”/“complete”写入某个位置“a”(数据库或文件)。在后台启动脚本后,发送到用户等待页面,该页面使用AJAX处理“A”处的更改。

此AJAX脚本将在后台执行一个PHP文件。如果需要,它还可以将响应发送到HTML元素

<script type="text/javascript" language="javascript">

function execute(filename,var1,var2,var3)
{
var xmlhttp;
if(window.XMLHttpRequest)
{
    //Code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
    //Code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
    alert("Your browser does not support AJAX!");
}

    var url = filename+"?";
    var params = "var1="+var1+"&var2="+var2+"&var3="+var3;

    xmlhttp.open("POST", url, true);

xmlhttp.onreadystatechange=function()
{
    if(xmlhttp.readyState==4)
    {
        //Below line will fill a DIV with ID 'response'
        //with the reply from the server. You can use this to troubleshoot
        //document.getElementById('response').innerHTML=xmlhttp.responseText;

        xmlhttp.close;
    }
}

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");

    xmlhttp.send(params);
 }
 </script>

函数执行(文件名,var1,var2,var3)
{
var-xmlhttp;
if(window.XMLHttpRequest)
{
//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
else if(window.ActiveXObject)
{
//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
其他的
{
警告(“您的浏览器不支持AJAX!”);
}
var url=filename+“?”;
var params=“var1=“+var1+”&var2=“+var2+”&var3=“+var3;
open(“POST”,url,true);
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4)
{
//下一行将用ID“response”填充一个DIV
//使用服务器的回复。您可以使用它进行故障排除
//document.getElementById('response').innerHTML=xmlhttp.responseText;
xmlhttp.close;
}
}
//随请求一起发送正确的标头信息
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
setRequestHeader(“内容长度”,参数长度);
setRequestHeader(“连接”,“关闭”);
xmlhttp.send(params);
}

如果您不想设置cron脚本,也可以尝试通过ajax函数运行脚本。

PHP有一个函数,即使请求页面的用户离开页面,也可以保持流程运行:如果您检查那里的注释,您可以看到以下示例:

<?php
ignore_user_abort(1); // run script in background
set_time_limit(0); // run script forever
$interval=60*15; // do every 15 minutes...
do{
   // add the script that has to be ran every 15 minutes here
   // ...
   sleep($interval); // wait 15 minutes
}while(true);
?>

这是一个纯粹的php cron作业,但此脚本的风险在于它会无限期地继续,或者至少会一直持续到您重置/杀死php为止

设置
设置时间限制(0)设置时间限制(86400)将在一天后终止脚本

这将为您指明正确的方向

重要 OP解决问题后,建议仅在对服务器具有SSH访问权限的情况下运行此脚本,以便在服务器挂起的情况下杀死/重新启动php apache。
也不要在实时服务器上运行脚本

不是这样,用户需要填写电子邮件内容并提交发件人。我理解-脚本会将此内容添加到db队列。Cron(例如,每5分钟一次)将检查队列中是否有电子邮件,并检查我的托管帐户中的所有域是否已被挂起。该怎么办?以及alfredfrancis.in,hostingrid.com也不工作进入shh->#/etc/init.d/apache2重新启动或服务httpd重新启动。我不知道怎么做,我甚至进不了cpanel…请帮帮我,我有大麻烦了。