gpt4 book ai didi

php - 如何防止 PHP 脚本同时运行?

转载 作者:行者123 更新时间:2023-11-29 07:06:27 25 4
gpt4 key购买 nike

我正在使用一个脚本来同步两个数据库之间的数据(本地到托管域)。当有人从 CMS 注销时,我进行了同步。不幸的是,我看到过两次注销发生得足够近以至于同步脚本被执行两次的情况。这不是我要更改的系统部分,但我希望有一种简单的方法可以使该脚本 (sync.php) 在已经运行的情况下不执行。

我想出了那个测试脚本:

$db = new DB_Mysql();

if ( $db->transactionBegun() == "0" )
{
$_Continue = true;

$_Continue = $_Continue && $db->squery( "START TRANSACTION" );

$_Continue = $_Continue && $db->squery( "SET @TransactionBegun = true" );

sleep( 10 );

$_Continue = $_Continue && $db->squery( "INSERT INTO tbConfiguration VALUES( NOW(), NOW() )" );

$_Continue = $_Continue && $db->squery( "SET @TransactionBegun = false" );

if ( $_Continue )
{
$db->query( "COMMIT" );
} else {
$db->query( "ROLLBACK" );
}
}

transactionBegun 方法包括:

    function transactionBegun()
{
$_ResultSet = $this->query("SELECT @TransactionBegun AS TransactionBegun")->fetch_all(true);

return $_ResultSet[ 'TransactionBegun' ];
}

出于一些奇怪的外来原因,我可以(同时)运行脚本两次,并且都将进行输入。

有什么想法吗??

编辑:我忘了提到我正在使用 mysql_pconnect() 并且服务器托管在 Windows 机器上。整个系统是一台使用平板电脑的收银机。访问服务器的唯一客户端是“localhost”。

最佳答案

变量是针对每个连接的,而不是针对每个用户的。使用两个独立的脚本,您将拥有两个独立的连接,每个连接都有自己的变量空间。

如果您需要真正处理锁定并行使用,则需要使用通过 GET_LOCK() 获取的服务器端锁。或者使用对资源进行独占锁定的事务模式。

关于php - 如何防止 PHP 脚本同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032895/

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