很多站长朋友们都不太清楚php读取文件过大,今天小编就来给大家整理php读取文件过大,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 PHP实现在有限内存中的大文件读取 2、 php读取txt文件的内容是txt文件太大了怎么办 3、 使用PHPExcel读取大文件(20M左右)时,报内存不足。 4、 php如何读取CSV大文件并且将其导入数据库示例 5、 php 使用file_get_contents读取大文件的方法 6、 php 如何读取大文件里的内容 PHP实现在有限内存中的大文件读取方法一:通过yield的生成器实现有限内存中的大文件读取
方法二:使用SPL 库 提供的 SplFileObject 类
php读取txt文件的内容是txt文件太大了怎么办<?
// 打开文件同时,打印每一行 $myFile = file( "100001.txt");//用file()函数读取文本文件的内容。 for($index = 0; $index < count($myFile); $index++)
{
print($myFile[$index]." ");//循环输出
}
?>修改如下:
$myFile = file( "100001.txt");//用file()函数读取文本文件的内容。
//设置分页
$page=is_numeric($_REQUEST['page'])?$_REQUEST['page']:1;
$page_size=3;//每页显示三行
//第一页,显示1-3行,对应的for循环起止条件是0-3
//第二页,显示4-6行,对应的for循环起止条件是3-6
//可以看出for循环的条件分别是首项为0与首项为3,公差为3的等差数列,以下分别是公式
$off=3*($page-1);
$off_size=3*$page;
$total_page=ceil(count($myFile)/$page_size);//总页数 /
/ 打开文件同时,打印每一行
for($index = $off; $index < $off_size; $index++)
{
echo iconv('gb2312','utf-8',$myFile[$index])."<br>";//循环输出
}
使用PHPExcel读取大文件(20M左右)时,报内存不足。这个报错不是PHPExcel报的错,而是php本身报的,原因大概就是因为你读取的文件超过了php单次请求运算占有的内存值的最大值。所以光设置PHPExcel是不行的
解决办法有三个:
1,修改 php.ini 中 memory_limit的值,重启apache服务
2,在你读取文件的页面头部加入 ini_set(”memory_limit”,”100M”); (-1为不限)
3,修改.htaccess 文档,在文档中加上一句:php_value memory_limit 16M(或更大)
php如何读取CSV大文件并且将其导入数据库示例思路:
读取csv文件,每读取一行数据,就插入数据库
示例
文件夹结构
/
file.csv //csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库操作)
index.php //php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
* 读取csv文件,每读取一行数据,就插入数据库
*/
//获取数据库实例
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '';
try {
$db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
//读取file.csv文件
if (($handle = fopen("file.csv", "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
//写入数据库
$sth = $db->prepare('insert into test set name=:name,age=:age');
$sth->bindParam(':name',$row[0],PDO::PARAM_STR,255);
$sth->bindParam(':age',$row[1],PDO::PARAM_INT);
$sth->execute();
}
fclose($handle);
}
数据表
CREATE TABLE `test` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8mb4_bin',
`age` INT(10) NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
运行结束后,数据库中会插入csv中的三行数据
php 使用file_get_contents读取大文件的方法当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP的文件读取函数file_get_contents()进行分段读取。
函数说明
string
file_get_contents
(
string
$filename
[,
bool
$use_include_path
[,
resource
$context
[,
int
$offset
[,
int
$maxlen
]]]]
)
和
file()
一样,只除了
file_get_contents()
把文件读入一个字符串。将在参数
offset
所指定的位置开始读取长度为
maxlen
的内容。如果失败,file_get_contents()
将返回
FALSE。
file_get_contents()
函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
应用:
复制代码
代码如下:
$str
=
$content=file_get_contents("2.sql",FALSE,NULL,1024*1024,1024);
echo
$str;
如果针对较小文件只是希望分段读取并以此读完可以使用fread()函数
复制代码
代码如下:
$fp=fopen('2.sql','r');
while
(!feof($fp)){
$str.=fread($fp,
filesize
($filename)/10);//每次读出文件10分之1
//进行处理
}
echo
$str;
php 如何读取大文件里的内容下个文件切割软件,把50M切成每个3M左右(大小自己定义),然后就可以打开了。
关于php读取文件过大的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php读取文件过大 php读取文件过大怎么办的详细内容...