重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PHP不直接管理内存的,是即存即取的,形式就是通过变量或变量引用来直接指向某块内存,
目前成都创新互联已为超过千家的企业提供了网站建设、域名、网页空间、网站托管、服务器租用、企业网站设计、尖草坪网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
方法一:通过yield的生成器实现有限内存中的大文件读取
方法二:使用SPL 库 提供的 SplFileObject 类
//第一种
?php
$conn = mysql_connect("主机名","用户名","密码");
mysql_select_db("数据库名",$conn);
$sql = "select * from user";
$result = mysql_query($sql);
$data="";
while($row = mysql_fetch_row($result)){
foreach($row as $v){
$data .=$v."|"; //加个树线隔开字段
}
nl2br($data); //读完一行回车
}
file_put_contents("abc.txt",$data);
//第二种
?php
$filename = "abc.txt";
$res = fopen($filename,"r");
while(!feof($res)){
$buffer = fgets($res);
$buffer = str_replace(' ', '|', $buffer);
$array = explode('|', $buffer);
foreach($array as $v){
if(strlen($v)0){
$arr[] = $v;
}
}
}
fclose($res);
//组装数组插入数据库就可以了
PHP性能优化过程中需要获取PHP内存消耗,使用memory_get_usage()函数可获取当前的内存消耗情况,函数使用简单,这里讨论一下memory_get_usage()函数的用法与实例
三,基础用法与实例
1,获取当前的内存消耗量
复制代码代码如下:
?php
echo memory_get_usage();
$var = str_repeat("liuhui", 10000);
echo memory_get_usage();
unset($var);
echo memory_get_usage();
?
分别输出:62328 122504 62416
说明:memory_get_usage()函数输出的数值为bytes单位
2,格式化memory_get_usage()输出
复制代码代码如下:
?php
function convert($size){
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
echo convert(memory_get_usage(true));
?
输出:256 kb
3,自定义函数获取数组或变量值大小
复制代码代码如下:
?php
function array_size($arr) {
ob_start();
print_r($arr);
$mem = ob_get_contents();
ob_end_clean();
$mem = preg_replace("/\n +/", "", $mem);
$mem = strlen($mem);
return $mem;
}
$memEstimate = array_size($GLOBALS);
?
不幸地告诉你,PHP是直接操作内存的,你声明的一个变量,新建的对象,都是放在内存里的。。
--------------分割线------------------------
其实,你要的是一个缓存,每次读取的时候,先读cache,cache里没有的话,,你预加载5页,放到memcached(一个比较常用的Cache)里;如果有的话,就直接读cache。
memcached 是高效、快速的分布式内存对象缓存系统。首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存