在PHP中實現多進程同時寫入同一文件,可以使用文件鎖來控制文件的訪問權限。以下是一個簡單的示例代碼:
<?php
$filename = "data.txt";
$pid = pcntl_fork();
if ($pid == -1) {
die("Fork failed\n");
} elseif ($pid) {
// Parent process
pcntl_wait($status);
$fp = fopen($filename, "a");
if (flock($fp, LOCK_EX)) {
fwrite($fp, "Parent process writing to file\n");
flock($fp, LOCK_UN);
}
fclose($fp);
} else {
// Child process
$fp = fopen($filename, "a");
if (flock($fp, LOCK_EX)) {
fwrite($fp, "Child process writing to file\n");
flock($fp, LOCK_UN);
}
fclose($fp);
}
在上面的代碼中,父進程和子進程都會嘗試打開同一個文件進行寫入操作。使用flock()
函數可以對文件進行加鎖,確保文件在同一時刻只有一個進程在進行寫入操作。當一個進程寫入完成后,釋放文件鎖,另一個進程才能進行寫入操作。
需要注意的是,文件鎖只能在同一個計算機上的進程之間起作用,無法在不同計算機之間起作用。如果需要多臺計算機之間進行文件的共享寫入,可以考慮使用網絡共享文件系統或者數據庫等方式來實現。