두 데이터베이스 사이에서 데이터를 동기화하는 스크립트를 사용하고 있습니다 (호스트 된 도메인에 로컬로). 누군가가 CMS에서 로그 아웃 할 때 동기화가 발생했습니다. 유감스럽게도, 두 번의 로그 아웃이 발생하여 동기화 스크립트가 두 번 실행되는 경우를 보았습니다. 그것은 변경하려는 시스템의 일부가 아니지만 이미 실행중인 경우 해당 스크립트 (sync.php)를 실행하지 못하게하는 쉬운 방법을 기대하고있었습니다.PHP 스크립트가 동시에 실행되지 않도록하려면 어떻게합니까?
은 그 테스트 스크립트를 내놓았다 한 : 같은 시간에 (내가 두 번 스크립트를 실행할 수 있습니다, 이상한 외국인 이유로
function transactionBegun()
{
$_ResultSet = $this->query("SELECT @TransactionBegun AS TransactionBegun")->fetch_all(true);
return $_ResultSet[ 'TransactionBegun' ];
}
:
$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 방법은 구성) 두 항목 모두 만들어집니다.
어떤 아이디어 ??
편집 : 나는 내가 mysql_pconnect()
를 사용하고 있고 서버가 Windows 시스템에서 호스팅되는 것을 언급하는 것을 잊었다. 전체 시스템은 태블릿 PC를 사용하는 금전 등록기입니다. 서버에 액세스하는 유일한 클라이언트는 "localhost"입니다.
@Variables는 연결에만 존재하며 전역 적이 아닙니다. 여러 클라이언트가 테이블/행과 동시에 상호 작용하지 못하게하려면 잠금을 사용해야합니다. –
내 라이브러리가 mysql_pconnect()를 사용하는 것을 잊어 버렸다. – Cybrix