往文件写入内容时加锁

<?php
/**
 * 往文件写入内容
 *
 * @param string $file 文件硬盘路径
 * @param string $contents 要写入的内容
 * @return int 写入的内容的字节数,若失败则返回false
 */
function write_file($file, $contents)
{
    $handle = fopen($file, 'a+'); // 文件末尾写入,若文件不存在则创建
    flock($handle, LOCK_EX); // 加锁(在解锁前其它进程只能读,写操作会被阻塞)
    $length = fwrite($handle, $contents); // 往文件写入内容
    // sleep(10); // 模拟长时间写入
    flock($handle, LOCK_UN); // 解锁
    fclose($handle); // 关闭文件

    return $length;
}

$file = __DIR__ . '/demo.txt';
$contents = '写入时间:' . microtime(true) . PHP_EOL;

var_dump(write_file($file, $contents)); // int(31)

  也可以使用file_put_contents()函数

<?php
/**
 * 往文件写入内容
 *
 * @param string $file 文件硬盘路径
 * @param string $contents 要写入的内容
 * @return int 写入的内容的字节数,若失败则返回false
 */
function write_file($file, $contents)
{
    return file_put_contents($file, $contents, FILE_APPEND | LOCK_EX);
}

$file = __DIR__ . '/demo.txt';
$contents = '写入时间:' . microtime(true) . PHP_EOL;

var_dump(write_file($file, $contents)); // int(31)

Copyright © 2024 码农人生. All Rights Reserved