Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在Windows中启动后台脚本而不等待完成_Php - Fatal编程技术网

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

PHP在Windows中启动后台脚本而不等待完成,php,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;

好的,我有一个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文件运行时挂起。 我在谷歌上搜索过让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,因为此脚本只需要在文件上载后运行,而不需要按计划运行,并且文件会根据用户上载到不同的位置

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

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


高级版谢谢。

您必须运行CRON,以便在操作执行时调用任何其他函数


您可以在代码中使用Ajax

会话无关。要在用户关闭页面后保持进程运行,请在过程之前包含此代码

ignore_user_abort(true);
set_time_limit(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

会话与已执行的应用程序完全无关。在数据库中编写作业,并让后台守护进程在数据库中查找新作业。您可以提供完整答案,或作为注释发布吗?当你发布一个答案时,它会显示在问题列表中,其他能够给出正确答案的人很可能会跳过这个问题,因为它似乎有答案。最后我创建了一个cron作业,指向一个PHP文件,该文件每隔5分钟运行一次,以查看数据库中是否有任何数据。工作起来很有魅力。我尝试使用以下方法来做到这一点:-$shell=newcom(“WScript.shell”)$shell->run(“C:/ProgramFiles(x86)/Parallels/Plesk/Additional/Plesk/PHP5/php.exe C:/inetpub/vhost/site/site.co.uk/$user/tools/convert.php”,0,false);但它不起作用?我在标题中指定了$user。