gpt4 book ai didi

php - 防止进程提交后锁定 - PHP

转载 作者:行者123 更新时间:2023-11-29 12:26:31 24 4
gpt4 key购买 nike

我有一个页面,用户可以在其中选择要运行的多个进程。我想要完成的简短版本是:选择一个进程,单击“执行”,然后在后台运行时在网站上完成其余工作。

我面临的问题是,流程提交后,用户无法在网站上进行任何进一步的操作。他们无法离开该页面、注销或执行其他任何操作。

该页面的代码是这样的:

<h1>Execute Processes</h1>
<div class='box'>
<select id='processes' style='width:300px;'>
<option value=''>Processes</option>
<option value='test'>Test Process</option>
</select><br />
<input type="submit" value="Execute" id='execute'/>
</div>

<script>
$("#execute").click(function() {
var process = $("#processes").val();
if(process != "") {
$.ajax({
url: '_processes/' + process + '.php',
type: "POST",
data: {}
});
message_popup("Process submitted");
} else {
alert("Please select a process");
}
});
</script>

对于本示例,我们只有一个进程。 “测试.php”。 “test.php”的代码是这样的:

<?php
require_once("../_include/constants.php");
require_once("../_include/connection.php");
require_once("../_include/_functions/functions_common.php");
require_once("../_include/_functions/functions_form.php");
require_once("../_include/_functions/functions_browser.php");
require_once("../_include/_functions/functions_legacy.php");
require_once("../_include/_functions/functions_data.php");

$p_name = "Sample Process";
$unix_pid = getmypid();
$p_started_by = mysqli_prep($_SESSION['username']);
execute_query("INSERT INTO site_process_monitor (process_id,process_name,start_time,status,started_by) VALUES ({$unix_pid},'{$p_name}',NOW(),'Started','{$p_started_by}')");//PROCESS START
$p_id = mysqli_insert_id($connection);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

sleep(60);

//CLOSING STATS////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
execute_query("UPDATE site_process_monitor SET end_time = NOW(), status = 'Completed' WHERE id = {$p_id}");//PROCESS COMPLETE
?>

非常基本。将一些打开的统计信息输出到我的数据库上的进程监控表,等待 60 秒,输出一些关闭的统计信息。

有没有办法启动此流程,以便我的用户可以继续浏览网站并执行其他任务(或提交其他流程)?

最佳答案

如果您在 PHP 中使用默认的基于文件的 session ,请注意,当任何特定脚本实例使用 session 文件时,PHP 将保持 session 文件锁定。这将阻止用户使用站点的任何其他启用 session 的部分,因为他们的每个请求现在都将等待 session 锁定被放弃。

对于长时间运行的脚本,您需要显式释放 session 锁:

session_write_close();
the_long_running_job();
session_start();

“关闭”$_SESSION 后仍然可用。但是对 $_SESSION 所做的任何更改都将丢失,因为脚本退出时 PHP 不会“重新关闭”它。

关于php - 防止进程提交后锁定 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28224814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com