浅析php中如何在有限的内存中读取大文件_php技巧

正常情况下,我们可以使用fseek来读取,好处就是不会一次性读取,以下代码只适合边取边处理的情况,不适合一次性读取一次性处理。
可以用以下办法生成测试文件

复制代码 代码如下:

$file_handle = fopen("./csdn.txt", "rb+");
for ($index1 = 1; $index1 <= 2000000; $index1++) {
    fwrite($file_handle, 'http://jb51.net'.$index1."\r");
}
fclose($file_handle);

读取处理代码如下:

复制代码 代码如下:

$i = 0;
$now = '';
while ($i >= 0) {
    if ($i>10) {
        break;
    }
    fseek($file_handle, 0, SEEK_CUR);
    $now = fgetc($file_handle);//可以自己写个判断false表示文件到头
    if ($now == "\r") {
        echo '找到断点';
    }
    echo $now;
    $i++;
}
fclose($file_handle);

时间: 2024-08-02 12:38:29

浅析php中如何在有限的内存中读取大文件_php技巧的相关文章

内存映射-读取大文件时遇到的问题

问题描述 读取大文件时遇到的问题 用readfile()函数也好,用内存映射的方式也好,怎么读取的数据都只是文件第一行?其他的都读取不到?不知道错在哪里,谢谢您的回答! 解决方案 应该要遍历去读取吧?不知道你怎么在弄... 解决方案二: 你可能只指定了第一行,没有遍历去指定行.把代码贴出来看看 解决方案三: 你是不是用了strtok. 它会把原字符串的分隔符替换成/0

PHP中使用CURL伪造来路抓取页面或文件_php技巧

复制代码 代码如下: // 初始化 $curl = curl_init(); // 要访问的网址 curl_setopt($curl, CURLOPT_URL, 'http://asen.me/'); // 设置来路 curl_setopt($curl, CURLOPT_REFERER, 'http://google.com/'); // 不直接输入内容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 降结果保存在$result中 $resul

mongodb mmap内存映射是把文件中数据全部映射到内存中的吗?

问题描述 mongodb mmap内存映射是把文件中数据全部映射到内存中的吗? 资料上说:在Mongodb中,其使用了操作系统底层提供的内存映射机制,即MMAP.MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内存中有对应的地址空间,这时对文件的读写可以直接用指针来做,而不需要read/write函数了.同时操作系统会将数据刷新保存到磁盘上. 我有个疑问:这个内存映射,是把文件中数据全部映射到内存中的吗?还是只是映射一部分内容,那么这部门内容又是什么的呢? 请专

Java中用内存映射处理大文件的实现代码_java

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验. package test; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExc

C语言中局部变量与全局变量在内存中的存放位置

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量. 1.1局部变量 局部变量也

深入探讨C语言中局部变量与全局变量在内存中的存放位置_C 语言

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量.1.1局部变量局部变量也称为内部变量

Java中使用内存映射实现大文件上传实例_java

在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验. 复制代码 代码如下: package test;  import java.io.BufferedInputStream;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  impor

内存映射修改大文件

本文介绍利用内存映射文件修改大文件:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤: 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件: 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件: 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中: 当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除: 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像: 关闭文件映射内核对象: 关闭文件内核对象: 下面将用一个

PHP中session使用方法详解第1/2页_php技巧

由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多.PHPChina 开源社区门户 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证.如果用户名和密码存储在数据库,每次都要执行一次数据库查