浅析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);
相关推荐
-
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
一,函数原型 int memory_get_usage ([ bool $real_usage = false ] ) 二,版本兼容 PHP 4 >= 4.3.2, PHP 5 三,基础用法与实例 1,获取当前的内存消耗量 复制代码 代码如下: <?php echo memory_get_usage(); $var = str_repeat("liuhui", 10000); echo memory_get_usage(); unset($var); echo memory
-
PHP中使用unset销毁变量并内存释放问题
复制代码 代码如下: for ( $i = 1; $i < 100; $i++ ) { $str = str_repeat('01234567', $i); $a = memory_get_usage(); unset($str); $b = memory_get_usage(); echo "\n ".$i.': '.($b - $a).' Bytes.'; } 从结果看出: 8 x 32 = 256 在256字节长的时候才真正有必要释放内存,有些人说,不如直接$str = n
-
访问php时提示内存位置访问无效的解决办法和思路分析
我们就需要找到是哪一个DLL文件加载出现了问题.排查方法是: 将php.ini中 display_startup_errors = Off 改为display_startup_errors = On . 这是访问php页面,服务器上会弹出php错误的提示对话框,你就可以明确看到是哪一个dll文件加载失败,有时会有多个dll文件加载失败,需要你先分号(;)注释掉php.ini中提示那个dll后继续访问如此反复排查. 把出问题的dll都用分号(;)注释掉后,php就可以正常运行了. 如果加载失败的d
-
解析PHP中的内存管理,PHP动态分配和释放内存
摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够编写例如"char *str = "hello world ";&qu
-
php实现读取内存顺序号
只是做记录,osc本站应该有重复的 semWrapper.class.php /* * 信号量(Semaphore). * 这是一个包装类,用于解决不同平台下对"信号量"的不同实现方式. * 目前这个类只是象征性的,在 Windows 平台下实际是空跑(并没有真的实现互斥). */ class SemWrapper { private $hasSemSupport; private $sem; const SEM_KEY = 1; public function __construct
-
php出现内存位置访问无效错误问题解决方法
配置环境如下: Win2003SP2+IIS6+php5.26+mysql5.0.51a+zend3.3a+PhpMyAdmin2.11.7.1 PHP执行方式:isapi.Mysql为手动安装. 关于"内存位置访问无效"的 错误解决办法与步骤:(一些部份无效的调试步骤略过..) 一.将IIS的错误显示打开,未发现错误原因! 二.检查IIS扩展,ISAPI.php.ini与Mysql配置以及相应的安装目录ACLs权限,均无误. 三.回收IIS进程,错误仍然出现"内存位置访问无
-
PHP脚本内存泄露导致Apache频繁宕机解决方法
在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境,服务器并发和压力都很小. 查看apache错误日志,报大量类似错误: 复制代码 代码如下: [Tue Feb 14 14:49:28 2012] [warn] child process 7751 still did not exit, sending a SIGTERM [Tue Feb 14 14:49:30 2012] [error] child p
-
php页面消耗内存过大的处理办法
解决办法: 1,修改 php.ini将memory_limit由 8M 改成 16M(或更大),重启apache服务 2,在PHP 文件中 加入 ini_set("memory_limit","100M"); 注意:为了系统的其它资源的正常使用 请您不要将 memory_limit设置太大,其中-1为不限 3,修改.htaccess 文档(前提是该目录支持.htaccess)在文档中新增一句:php_value memory_limit 16M(或更大)
-
phpExcel导出大量数据出现内存溢出错误的解决方法
phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码 代码如下: PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中 复制代码 代码如下: PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzip压缩,然后保存在内存中 复制代码 代码如下: PHPEx
-
PHP变量内存分配问题记录整理
今天碰到一个关于php变量内存分配的问题,记录一下. 如下这段代码: 复制代码 代码如下: $a = array ( 'str' => 1, 'child' => 2 ); $b = $a; $b['child'] = $a; $b['child']['str'] = 2; echo $b['str']; $b = null; echo $a['str']; 会输出什么呢,结果是11,$b=$a的时候其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy
随机推荐
- js实现三级联动效果(简单易懂)
- 详解vue2路由vue-router配置(懒加载)
- 五种windows密码设置及破解
- ASP.NET MVC分页和排序功能实现
- Laravel 5 学习笔记
- ASP 中 Split 函数的实例分析
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决
- Android-自定义控件之ListView下拉刷新的实现
- 快速学习jQuery插件 Form表单插件使用方法
- JS只能输入正整数的简单实例
- jQuery下的Ajax调试步骤
- Android实现音量调节的方法
- Memcached缓存系统的介绍、安装以及应用方法详解
- 在SQL中获取一个长字符串中某个字符串出现次数的实现方法
- JQueryMiniUI按照时间进行查询的实现方法
- C#实现系统托盘通知的方法
- VxD的初始化和结束
- Java中JDom解析XML_动力节点Java学院整理
- nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
- iOS指纹登录(TouchID)集成方案详解