Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不使用数据库的情况下处理大量数据?_Php_Arrays_Highstock - Fatal编程技术网

Php 如何在不使用数据库的情况下处理大量数据?

Php 如何在不使用数据库的情况下处理大量数据?,php,arrays,highstock,Php,Arrays,Highstock,我正在将365个csv文件中的数据加载到highstock图形api中。我使用PHP读取csv文件并创建数组来保存信息。然而,我遇到了以下问题: 致命错误:已耗尽67108864字节的允许内存大小 我如何解决这个问题 希望创建此图表: 与其将内存中的所有内容都表示为数组,不如直接使用它访问json文件。我将假设您需要的数据是一个包含时间戳+6个浮点字段的二维多维数组 在不知道如何将信息提供给图表api的很多细节的情况下,这里是第一个尝试 $tmpFile = tempnam("tmp/","

我正在将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=tempnam(“tmp/”、“highchart_389;”);
$out=fopen($tmpFile,“w”);
//我们不打算使用json编码,因为它需要我们将数组保存在内存中。
FPUT($out,“[”);

对于($i=0;$ii)在您提供正在解决的实际任务之前,不可能提供解决方案。PS:“允许php分配更多内存并在服务器上安装更多内存”算是一个答案吗?@zerkms你是什么意思?我的意思是-除非给出彻底的任务解释,否则不可能提供优化建议。优化中没有银弹,每种情况都是独一无二的。PS:不过有经验法则,比如:尽可能少地将数据保存在内存中,并在不需要时尽快删除nymoreOk,那么你只需要更多关于我的案例的信息吗?@Willow:一个csv是否可以放入内存?你可以一个接一个地向API发送请求吗?这样你就可以读取/处理一个csv,发送一个请求,
unset()
所有数组,并对第二个数组重复相同的操作,依此类推?您发布的示例附带的JSFIDLE上的jabber使用了json。按照我的结构方式,在连接到浏览器时,没有多余的空格会占用带宽。
readfile($tmpFile);
readfile为php创建一个直接从输入文件到输出缓冲区的管道,这样它就不会超出您的内存…只要确保您不在ob_start块中,并且应该没有内存问题。这意味着您不能写入
/tmp/
在服务器上留出一个允许apache写入和替换的位置tmpname调用中的路径前缀,因此您需要在Web空间中创建一个目录,并授予它读写和执行权限。(我会将其设置在托管此php文件的位置旁边)。然后您可以将tmpname调用更改为read
tempnam(uu DIR./highchart);
这将使其成为Web服务器的位置(运行php的人)尝试写入这些文件,但它将拥有这样做的权限。大量的
unset()
在这里是多余的。您可以删除它们,但不会有任何更改。