PHP在Windows中启动后台脚本而无需等待完成

时间:2013-11-29 10:56:39

标签: php

好的我有一个PHP文件,一旦文件上传,它就会被移动到一个新的位置,这会触发一个事件,让用户知道文件已经上传,并启动他们提交的PDF文件的转换过程。

if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
echo '{"status":"success"}';
echo 'File Uploaded';
include('tools/convert.php');
exit;
}

这导致页面在convert.php文件运行时挂起。 我已经查看了Google有哪些方法可以让PHP脚本在后台运行 以下列出了我尝试过的一些脚本: -

/* Attempt 1 Command Line */
if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
echo '{"status":"success"}';
echo 'File Uploaded';
exec("C:/php/php5/php.exe tools/convert.php")  
exit;
}

/* Attempt 2 Session Closing within convert.php */
ob_start();
session_start();
session_write_close();
ob_end_flush();

/* Attempt 3 Session Closing */
session_start();
session_unlink();
session_destroy();
session_start();
session_regenerate_id();
header("Location: tools/convert.php");

我不确定是否为此运行cron,因为此脚本只需在文件上传后运行,而不是按计划运行,并且文件会根据用户上载到不同的位置。

这些脚本和其他脚本的许多其他变体,我如何能够运行第一个代码退出()但是工具/ convert.php文件仍在运行?

我正在使用: - Windows Server 2008 R2
IIS 7
PHP 5.2.17

先谢谢你。

3 个答案:

答案 0 :(得分:1)

会话无关。要在用户关闭页面后保持进程运行,请在过程

之前包含此代码
ignore_user_abort(true);
set_time_limit(0);

答案 1 :(得分:0)

你必须运行CRON,因为当操作执行时,任何其他函数都会被调用。

OR

您可以在代码中使用Ajax

答案 2 :(得分:0)

当使用exec时,PHP将等待其子进程完成执行。您需要重定向输出并将其分离。当您在Windows上运行时,可以这样做:

<?php 
$shell = new COM("WScript.Shell");
$shell->run("C:/php/php5/php.exe tools/convert.php", 0, false); //Need the full path to your convert script