PHP - 文件写入[含读取]

1.应用场景

写入文件~

2.学习/操作

1.小文件写入

方法一

function writeFile($filePath, $content)
{
    $mode = file_exists($filePath) ? 'a' : 'w'; // 存在就追加,否则新建写入
    $targetFile = fopen($filePath, $mode) or die('Unable to open file!');
    fwrite($targetFile, $content . "\n");
    fclose($targetFile);
    echo 'Successful write!';
}

优化后:

参见:https://github.com/ningxiaofa/learning_of_php/blob/master/文件写入/simple-echo-content-to-file.php

// 记录日志 --- 常用于打印调试,收集日志信息
$filename = 'log.txt';
$logPath = dirname(__FILE__).'/'.$filename;

function write($file_path, $content) {
    if(file_exists($file_path))
    {
        //"当前目录中,文件存在",追加
        $myfile = fopen($file_path, "a") or die("Unable to open file!");
        $txt = "\n" . $content . ' --- '. "【" . date('Y-m-d H:i:s', time())."】";
        fwrite($myfile, $txt);
        //记得关闭流
        fclose($myfile);
    } else {
        //"当前目录中,文件不存在",新写入
        $myfile = fopen($file_path, "w") or die("Unable to open file!");
        $txt = $content . ' --- ' . "【" . date('Y-m-d H:i:s', time())."】";
        fwrite($myfile, $txt);
        //记得关闭流
        fclose($myfile);
    }
}

write($logPath,'log begin');

简化后

protected static function write($filePath, $content)
{
    $handle = null;
    // Append when file exists in current directory, else create and write
    $mode = 'w';
    if (file_exists($filePath)) {
        $mode = 'a';
    }
    $handle = fopen($filePath, $mode) or die("Unable to open file!");
    fwrite($handle, $content . ',');
    fclose($handle);
}

扩展:

保证多个PHP进程/线程对同一个文件成功写入

Note: PHP是不支持多线程的,可以使用php的flock加锁函数实现。

Code: https://github.com/ningxiaofa/learning_of_php/blob/master/文件写入/多进程写入同一文件/multiple-processes-write-to-the-same-file.php

<?php
function writeFile($filePath, $data){
    $handle = fopen($filePath, 'a+'); // 以追加的方式打开文件,返回的是指针
    if(!$handle) return;
    do{
     usleep(100);//暂停执行程序,参数是以微秒为单位的
    }while(!flock($handle, LOCK_EX)); // 以独享写入方式锁定文件,成功返回TRUE,否则FALSE
    fwrite($handle, $data."\r\n"); // 以追加的方式写入数据到打开的文件
    flock($handle, LOCK_UN); // 解锁,以让别的进程进行锁定
    fclose($handle); // 关闭打开的文件指针
}

writeFile('./test.txt','test');

方法二

全部读入内存,使用file_get_contents();

2.大文件写入[GB级别]

如果没有超过物理内存

TBD

如果超过物理内存

TBD

莫道君行早,更有早行人~

3.问题/补充

TBD

4.参考

TBD

后续补充

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将PHP数组写入二进制文件,您可以使用PHP函数`pack()`和`fwrite()`。 以下是一个示例代码,它将一个PHP数组写入二进制文件中: ```php // PHP数组 $data = array('apple', 'banana', 'orange'); // 打开二进制文件 $file = fopen('data.bin', 'wb'); // 将数组打包为二进制字符串 $packedData = pack('a*a*a*', ...$data); // 将二进制字符串写入文件 fwrite($file, $packedData); // 关闭文件 fclose($file); ``` 在此示例中,`pack()`函数将数组打包为一个二进制字符串。`'a*'`格式指定将每个字符串作为NULL结尾的字符数组打包,并将它们连接到一起。使用`...`操作符将数组传递给`pack()`函数。 接下来,使用`fwrite()`函数将打包的数据写入二进制文件中。最后,使用`fclose()`函数关闭文件。 您可以使用以下代码读取该二进制文件并将其解包为原始数组: ```php // 打开二进制文件 $file = fopen('data.bin', 'rb'); // 读取文件内容 $packedData = fread($file, filesize('data.bin')); // 解包二进制数据为数组 $data = unpack('a*string1/a*string2/a*string3', $packedData); // 输出解包后的数组 print_r($data); // 关闭文件 fclose($file); ``` 在此示例中,`fread()`函数读取整个二进制文件并将其存储在`$packedData`变量中。 然后,使用`unpack()`函数将二进制数据解包为原始数组。`'a*'`格式指定将每个字符串作为NULL结尾的字符数组解包,并将它们存储在不同的数组键中。 最后,使用`print_r()`函数输出解包后的数组。 希望这可以帮助您将PHP数组写入二进制文件并从中读取数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值