【发布时间】:2019-10-13 19:49:13
【问题描述】:
我需要在读取文件时获取start、end和md5 hash的值,然后将其插入数据库。它工作得很好 读取整个文件时,值会正确插入到数据库中。
现在假设我有一个大约 883mb 的文件,我想读取最后一个 880mb 而排除第一个 3mb。 p>
我怎样才能做到这一点。(即从剩余的 4mb 到 883mb 读取并将其相应的值插入数据库)
我在这里找到的解决方案只是读取文件的最后 1mb Read part of a file in PHP
这是读取整个文件时的工作代码
$fragSize = 1 * 1024 * 1024; // chunk 1 mb
$file = file_get_contents('mydata.zip'); //about 883mb
$fileSize = strlen($file);
$numFragments = ceil($fileSize / $fragSize);
$i = 0;
while ($i < $numFragments) {
$chunkSize = $fragSize;
$start = $i * $fragSize;
$end = $i * $fragSize + $chunkSize - 1;
$offset = $i * $fragSize;
if ($stream = fopen('mydata.zip', 'r')) {
// you have to chunk the files to avoid memory issues
$data = stream_get_contents($stream, $chunkSize);
fclose($stream);
}
$hash = md5($data);
// insert start, end and hash value to database
// pdo connection
$statement = $db->prepare('INSERT INTO data1
(start_read,end_read,hash_read)
values
(:start_read,:end_read,:hash_read)');
$statement->execute(array(
':start_read' => $start,
':end_read' => $end,
':hash_read' => $hash
));
$i++;
}
【问题讨论】:
标签: php