我正在将 365 个 csv 文件中的数据加载到 highstock 图形 api 中。我正在使用 PHP 读取 csv 文件并创建数组来保存信息。但是我遇到了:
致命错误: 67108864 字节的允许内存大小已用尽
我该如何解决这个问题?
希望创建此图表:
我正在将 365 个 csv 文件中的数据加载到 highstock 图形 api 中。我正在使用 PHP 读取 csv 文件并创建数组来保存信息。但是我遇到了:
致命错误: 67108864 字节的允许内存大小已用尽
我该如何解决这个问题?
希望创建此图表:
与其将内存中的所有内容都表示为数组,不如直接使用它访问 json 文件。我将假设您需要的数据是一个二维多维数组,其中包含一个时间戳 + 6 个浮点字段。
在不了解如何将信息提供给图表 api 的大量细节的情况下,这是第一次尝试。
$tmpFile = tempnam("tmp/","highchart_");
$out = fopen($tmpFile, "w");
// we are not going to use json encode because it requires us to hold the array in memory.
fputs($out, "[");
for($i=0;$i<count($files);$i++){
if (($handle = fopen($files[$i], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// You may be able to get arround the timestamp calculation by just saying
$timestamp = strtotime($data[0]." ".$data[1]);
fputs($out, "[".(int)$timestamp.",".(float)$data[2].",".
(float)$data[3].",".(float)$data[4].",".(float)$data[5].",".(float)$data[13]."]");
}
fclose($handle);
}
}
fputs($out, "]");
fclose($out);
现在该文件$tmpFile
将包含一个 json 编码数组,然后您可以使用 readfile 或 fpassthru 访问浏览器。此外,我会敦促您为此使用某种缓存机制,而不仅仅是将它们存储在临时文件中。+67MB 的数据对于处理每个请求来说是相当可观的。