php使用多个进程同时控制文件读写示例

  

复制代码 代码如下:

  <?php

  /**

  * 写入数据

  * @param  [string] $path [文件路径]

  * @param  [string] $mode [文件打开模式]

  * @param  [string] $data [数据]

  * @return [bool]

  */

  function writeData($path, $mode, $data){

  $fp = fopen($path, $mode);

  $retries = 0;

  $max_retries = 100;

  do {

  if ($retries > 0) {

  usleep(rand(1, 10000));

  }

  $retries += 1;

  }while (!flock($fp, LOCK_EX) and $retries <= $max_retries);

  if ($retries == $max_retries) {

  return false;

  }

  fwrite($fp, $data."\r\n");

  flock($fp, LOCK_UN);

  fclose($fp);

  return true;

  }

  /**

  * 读数据

  * @param  [string] $path [文件路径]

  * @param  [string] $mode [文件打开模式]

  * @return string

  */

  function readData($path,$mode){

  $fp = fopen($path, $mode);

  $retries = 0;

  $max_retries = 100;

  do {

  if ($retries > 0) {

  usleep(rand(1, 10000));

  }

  $retries += 1;

  }while (!flock($fp, LOCK_SH) and $retries <= $max_retries);

  if ($retries == $max_retries) {

  return false;

  }

  $contents = "";

  while (!feof($fp)) {

  $contents .= fread($fp, 8192);

  }

  flock($fp, LOCK_UN);

  fclose($fp);

  return $contents;

  }

  writeData('D:/webServer/demo.txt','a+','this is a demo');

  echo readData('D:/webServer','r+');