在PHP中运行后台进程

时间:2017-06-21 09:14:28

标签: javascript php background-process

我不想使用" shell,exec等" ...只在php中使用循环!

我的理解是在这种情况下:

  1. 我在页面中有一个表单,在表单提交上,我将调用一个将在后台运行的PHP脚本。
  2. 后台进程已启动并正在运行....正在运行....正在运行......正在运行......
  3. 我想找回进程ID,其中Process id后台进程已启动,之前的后台进程正在运行....正在运行.....正在运行..........
  4. 我需要这样做,如果可能的话,一个文件用循环执行单个代码直到完成某行


    项目结构的想法: click here

2 个答案:

答案 0 :(得分:0)

很多很多年前我写了一个PHP守护进程,它在客户端系统的后台无休止地运行,通过轮询服务器接收指令然后执行各种文件I / O操作作为响应。对于它的价值,这里是允许它作为守护进程运行的代码的相关部分,即后台PHP进程:

// (Note:
// The writeLog() function has been set up previously and is a 
// trivial function that adds timestamped lines into a logfile.)


$PIDfile='/tmp/myPID';           // Store process ID in this file

// If a deamon is already running, display its PID and abort:
if (file_exists ($PIDfile)) {
  if (is_readable ($PIDfile))
    die ($PIDfile . " already exists, PID=" . 
         file_get_contents ($PIDfile) . " (stale PID file?)\n");
  else
  die ($PIDfile . " already exists, but is not readable.\n");
}

// Set execution directives if we're running a PHP version prior to 5.3.0
// (ticks are deprecated as of PHP5.3.0 and will be removed from PHP6.0.0):
if (version_compare (PHP_VERSION, '5.3.0', '<'))
  declare (ticks = 1);

// Fork off the background (daemon) process:
$pid = pcntl_fork ();
if ($pid == -1) {
  die ("Fatal: unable to fork.\n");
} elseif ($pid)
  exit ();                                      // We are the parent process

// If we arrive at this point, we are the child process.
// Detach from the controlling terminal:
if (posix_setsid () == -1)
  die ("Fatal: unable to detach from terminal.\n");

// Register child PID:
$posid = posix_getpid ();
$fp = fopen ($PIDfile, "w");
fwrite ($fp, $posid);
fclose ($fp);

// Set up signal handlers:
pcntl_signal (SIGTERM, "SIGhandler");
pcntl_signal (SIGHUP, "SIGhandler");

// Log successful deamonization:
writeLog ("Daemon spawned, PID = " . $posid);

// Daemon payload code starts here:

while (1) {

  // Do all kinds of interesting stuff that does not require any user
  // input or screen output. In my case this consisted of file I/O and
  // communication with a server using various sockets.

}

// EOF

希望这有帮助!毋庸置疑,上面的代码是从我的代码太平间复制并粘贴多年的东西,并且不提供任何担保或保证。享受!

答案 1 :(得分:0)

后台流程执行: code font

<?php
set_time_limit(7200);
ignore_user_abort(true);

fopen('./.exec','w');

$conn = mysql_connect($servidor,$usuario,$senha);
mysql_select_db($bdados);

while (file_exists('./.exec')) {
    clearstatcache();
    if (file_exists('./.in') && filesize('./.in')) {
        $out = fopen('./.out','w');
        $query = mysql_query(file_get_contents('./.in'));
        $campos = mysql_num_fields($query);
        $sep = '';
        for ($i = 0; $i < $campos; $i++) {
            fwrite($out,$sep.mysql_field_name($query,$i));
            $sep = ';';
        }
        fwrite($out,"\n");
        while ($res = mysql_fetch_row($query)) {
            for ($i = 1; $i < $campos; $i++) {
                fwrite($out,$sep.$res[$i]);
                $sep = ';';
            }
            fwrite($out,"\n");
        }
        fclose($out);
        fclose(fopen('./.in','w'));
    }
    sleep(1);
}
?>

也许是这样的,你说什么?

我想让它工作,没有mysqli&amp; MySQL的。