gpt4 book ai didi

javascript - 如何从 Web 界面停止 PHP 执行

转载 作者:行者123 更新时间:2023-12-01 03:35:18 25 4
gpt4 key购买 nike

例如,我们有以下index.php。我们还假设这个 PHP 代码永远不会结束执行,并且它将永远运行。我想要一种方法来从该页面的界面取消此 PHP 执行。用户看到该网站而触发的操作。不是来自在 Web 服务器上运行的 PHP 脚本内部。

<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main</title>
</head>
<body>
<a href="#" class="button">Cancel PHP execution</a>

<?php
// magic that takes time
?>

</body>
</html>

如何通过按钮或客户端发生的事件停止 php 执行。我对所有类型的解决方案都持开放态度 ajax、js...

该算法进行繁重的计算,其时间复杂度为 !n,我不想每次退出时都检查该 php 逻辑,因为我不知道执行将在哪里,也不知道执行哪个部分将花费更多时间,也就是说,停止我的例程的命令实际上是异步的。

最佳答案

要使用无限的“魔法”,您将需要某种循环。在循环内部放置一个标志,例如:

while (1==1) {
if ($flag){
break;
}
}

并让用户用 $_GET 或 $_POST 填充该标志。

PS:我强烈建议您避免这些循环例程,php 不能很好地使用它们,因为它是一个脚本,有可能因过载而破坏浏览器。顺便说一句,如果您仅依赖 PHP,仅使用一些提交来刷新页面就会“中断”脚本执行(如果页面在此之前不会中断)。要在 Web 中使用连续例程,主要方法是使用 javascript(如果您需要存储某些内容或携带任何类型的信息,请添加 AJAX)。

编辑:那么,您需要的是使用带有回调的 AJAX 来验证例程/计算中的每个过程(很喜欢,因为您可以存储最后一个计算过程,使用一些缓存来改善下一次计算的时间 - 如果算法太重了)或者当用户单击某些按钮或东西时停止 ajax 调用:

var strongcalcs = $.ajax({
type: 'POST',
url: 'magic.php',
success: function(result){}
});

在您的 PHP 文件中:

<?php
// magic that takes time
?>

然后您可以中止请求:

<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main</title>
</head>
<body>
<button class="button">Cancel PHP execution</button>

</body>
</html>
<script>
$('button').on('click', function(){
strongcalcs.abort();
});
</script>

最终:

<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Main</title>
</head>
<body>
<button id="cancel" class="button">Cancel PHP execution</button>

<script language="javascript">

var strongcalcs = $.ajax({
type: 'POST',
url: 'execute.php',
success: function(result){
alert(result);
},
error: function () {
alert("ABORT!");
}
});

$('#cancel').click(function () {
strongcalcs.abort();

});
</script>
</body>
</html>

关于javascript - 如何从 Web 界面停止 PHP 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316914/

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