यहां मुख्य समस्या पीआईडी को आपके एसिंक अनुरोध के बीच साझा करना है जो रिपोर्ट उत्पन्न करता है और स्क्रिप्ट जो इसे रोकना चाहिए।
आप निम्न का उपयोग करके अपना पीआईडी प्राप्त कर सकते हैं:
$stmt = $dbh->prepare("SELECT CONNECTION_ID()");
$stmt->execute();
$pid = $stmt->fetchColumn();
और आप php-shared-memory जैसी किसी चीज़ का उपयोग कर सकते हैं अपनी स्क्रिप्ट के बीच एक साझा चर बनाने के लिए। यदि आप अपनी परियोजना निर्भरता के लिए संगीतकार का उपयोग नहीं कर रहे हैं, तो इस पुस्तकालय में एक स्टैंडअलोन रिलीज़ है (1.5.0, यहां )।
कार्यान्वयन नमूना:
<?php
if (!include __DIR__ . '/vendor/autoload.php')
{
die('You must set up the project dependencies.');
}
use Fuz\Component\SharedMemory\SharedMemory;
use Fuz\Component\SharedMemory\Storage\StorageFile;
// your intializations here
$storage = new StorageFile("/tmp/shared.{$user_id}.sync");
$shared = new SharedMemory($storage);
if (!isset($_POST['cancel_request']))
{
$stmt = $dbh->prepare("SELECT CONNECTION_ID()");
$stmt->execute();
$pid = $stmt->fetchColumn();
$shared->pid = $pid;
// your long query here
$shared->destroyStorage();
}
else
{
// kills pid
$pid = $shared->pid;
if (!is_null($pid))
{
$dbh->exec("KILL {$pid}");
}
}