【发布时间】:2013-07-18 15:50:55
【问题描述】:
您好,我是 PHP 新手,不知道我要问的问题是否可行,或者是否有意义,但这里是。
我想执行一个 PHP 脚本,就好像我在 WebServer 上执行一个独立的应用程序一样,我想要实现的是当客户在网站上购买东西并且一旦他在网站上看到付款确认通知,他应该被允许关闭浏览器窗口或注销,而不会影响一旦用户被带到显示他支付成功的页面时开始的大订单生成过程。
现在我正在使用 AJAX 调用我的付款后处理 PHP 脚本,并保留该脚本以忽略任何用户中止调用。
这是告诉用户已成功收到付款的页面。
thankyou.php
这是执行付款成功后才需要进行的处理的页面
FinishCheckoutProcess.inc.php
现在 thankyou.php 使用 AJAX 异步执行 FinishCheckoutProcess.inc.php 并且 FinishCheckoutProcess.inc.php 有一个 PHP。 ini 设置如下: 忽略用户中止(真);
现在 AJAX 和 ignore_user_abort(true) 的组合允许即使用户关闭他的浏览器窗口,也可以在没有任何错误的情况下运行后付款过程,但是由于这个脚本与用户或浏览器无关,我只是想知道是否可以像独立于浏览器的独立应用程序一样在后台运行此脚本。
另外,我的 WebServer 是 Apache,操作系统是 Linux(Ubuntu 操作系统)。
我的工作已经完成,但我只是想知道是否有更好/更安全的方法来做。
无论如何,提前感谢大家,这个网站对我的帮助比任何书都多。所以你们所有为像我这样的新手贡献时间的专家们都很棒。请继续努力。
再次非常感谢。
根据收到的建议 如果我使用“exec”方法来执行 FinishCheckoutProcess.inc.php,这是否会执行数据库相关的命令,是否能够运行更多的 PHP 脚本。
FinishCheckoutProcess.inc.php 依次执行一系列其他 PHP 脚本,这些脚本又执行其他 PHP 脚本,因此使用“exec”命令运行 FinishCheckoutProcess.inc.php 会产生任何困难。
FinishCheckoutProcess.inc.php 进程也与 MySQL 数据库交互,所以如果我使用 "exec ”命令。我现在正在将必要的 MySQLi 连接对象传递给这个 PHP 脚本。那么我可以使用“exec”
以同样的方式将它传递给它吗这个过程也很繁重,因为它使用 IMagick 和 ImageMagick 生成一组 4 个图像文件。
它为每个订购的产品生成一组 4 个图像文件,因此如果 1 个产品的数量为 10,则生成的总文件将是 1x10x4 = 40
如果有两种产品,一种的数量为 2,另一种的数量为 4,则生成的文件总数为 1x2x4 = 8 + 1x4x4 = 16 = 24
所以这个脚本可能需要运行很长时间并且由于超时原因不能被停止,它需要完成它开始的事情。
基本上FinishCheckoutProcess.inc.php的逻辑和过程相当复杂,所以只想确认“exec”是否可以处理。
我也不确定,但其中一些也使用 $_SESSION 变量,但如果这是一个问题,我可以修改它,$_SESSION 变量只能在一个地方使用,是的,之前在浏览器中设置了 $_SESSION 变量FinishCheckoutProcess.inc.php 脚本被执行。通过一些以前的 PHP 脚本。
我只想执行 FinishCheckoutProcess.inc.php 脚本独立于父/调用脚本,即 thankyou.php,这样如果用户关闭浏览器然后FinishCheckoutProcess.inc.php 不会停止或中止,因为父/调用脚本即 thankyou.php 现在不再运行。
【问题讨论】:
-
我会使用 CRON 作业来完成付款过程,您现在所做的只有在发出 AJAX 请求时才会运行,如果用户运行 JS 则永远不会触发,如果有的话是网络错误等。
-
+1,cron job 将是最好的解决方案
-
可以使用
exec从thankyou.php 执行 FinishCheckoutProcess.inc.php 并传递您需要的任何参数 -
嗨,克里斯,你能告诉我更多关于你所指的网络错误的信息吗 另外我不希望使用 Cron 作业,因为我只想在特定场合执行脚本而不是安排和任务,因为这不是重复的,销售可以在 24 小时内发生一次,所以不想使用“cron”。我个人喜欢“执行”的建议