我正在迭代一些csv文件(没有超过320MB)以使用以下脚本清理和格式化文件的方式:
while($row = mysqli_fetch_array($rsSelect)){
$fileName = $row["file_name"];
if(strpos($fileName,'DATA') == true){
$file = $dir.$row["manifest_files"]."";
echobr($file);
$file1 = file_get_contents($file, null);
unset($file);
$file2 = str_replace('","',' ', $file1);
unset($file1);
$file3 = str_replace('"','', $file2);
file_put_contents($dir.$row["file_name"].".txt",$file3,FILE_USE_INCLUDE_PATH);
unset($file2);
unset($file3);
}
我收到以下错误,无论我在php.ini中设置内存限制有多高,或者在我可以释放内存的情况下取消设置varbeles。我已经尝试在脚本中设置限制但仍然没有去。我的机器不缺RAM,足以在我需要时操作文件时轻松存储。
错误:(!)致命错误:内存不足(已分配683147264)(尝试分配364322204字节)
答案 0 :(得分:3)
使用file_get_contents()
需要将整个文件读入一个大块的内存中。您最好在fopen()
周围使用fgets()
。$fp = fopen('file.csv', 'r');
while (($line = fgets($fp)) !== false) {
// $line is the whole line
}
。这将一次只读一行:
fgetcsv()
或者,您可以使用$fp = fopen('file.csv', 'r');
while (($row = fgetcsv($fp)) !== false) {
// $row is an array of values from the line
}
并根据需要处理单个字段:
var True = "True";
var False = "False";
var x = @Model.validNumber;
if( x != False){
$('#ticketResults').toggleClass('hidden');
};