如何在Windows服务器上只运行一个php脚本示例,不管收到多少请求

qlzsbp2j  于 2023-03-28  发布在  PHP
关注(0)|答案(2)|浏览(140)

有没有可能让一个PHP脚本的单个示例运行一个Windows服务器,不管有多少请求指向这个脚本,一次只能启动和运行脚本的一个示例?脚本执行完毕后,它将死亡,只有在收到新请求后才能启动。不需要将请求排队,因为运行脚本产生的结果存储在用户的accounts,这样即使用户的单个请求失败,用户也可以访问他们的帐户并查看结果。但是,如果同一进程的多个示例正在运行,那么它们将竞争相同的数据库和I/O资源。因此,为了避免数据库锁定和资源独占句柄,只需脚本的一个示例就足够了。但是,在连续循环中运行脚本会消耗太多的服务器资源,因此脚本仅每两小时运行一次,或者在用户特别请求时运行一次。

kkih6yb8

kkih6yb81#

最简单和可移植的事情是在一些预定义的文件上使用文件锁。
例如:

<?php
  $flockfile = fopen('lockfile.lck', 'c'); // Open a file, the file will be closed when the script ends
  if (!flock($flockfile, LOCK_EX | LOCK_NB)) {
    // If cannot lock the file - just exit
    fclose($flockfile);
    die("Another process is running");
  }
p8h8hvxi

p8h8hvxi2#

下面是一个使用提供咨询锁的数据库的解决方案,尽管在数据库中存储令牌也可以完成类似的工作。

1. The script checks if an advisory lock is present in the database, and if is then exits.
2. If the lock is not present then the script places an advisory lock for transaction.
3. The lock is automatically released when transaction commits or script crashes.

相关问题