Heim > Fragen und Antworten > Hauptteil
Derzeit gibt es mehrere Radargeräte, die einen bestimmten Bereich scannen. Nach dem Scannen werden Daten von etwa 1,4 Millionen Punkten (jeder Punkt enthält 4 Attribute) zurückgegeben.
Dann fügt das Radargerät die Daten zu ,
分隔的字符串:"x1,y1,a1,p1,x2,y2,a2,p2......x1400000,y1400000,a1400000,p1400000"
zusammen. Die Größe dieser Zeichenfolge sollte Dutzende Megabyte betragen, weniger als 100 Megabyte.
Der PHP-Code wird folgendermaßen verarbeitet:
$num=$_POST['num'];//点的总数量
$str=$_POST['str'];//点的4个属性组成的字符串
$str_arr=expload(',',$str);//将字符串转换为数组
//将数组转换成json字符串
$point=array();
for($n=1;$n<=$num;$n++){
$x=$str_arr[$n*4-4];
$y=$str_arr[$n*4-3];
$a=$str_arr[$n*4-2];
$p=$str_arr[$n*4-1];
$point[]=array("x"=>$x,"y"=>$y,"a"=>$a,"$p"=>$p);
}
$json_str=json_encode($point);
//将json字符串保存在".txt"文件中
$handle=fopen("./1.txt","w");
fwrite($handle, $json_str);
fclose($handle);
//返回请求成功信息
echo "ask=1&cmd=3";
exit;
Ich weiß nicht viel über den Speicherverbrauch und dies ist das erste Mal, dass ich eine so große Datenmenge verarbeite.
Wenn die vom Radar übertragenen Daten nur 11WGruppenpunkte (ungefähr 3MBDaten) sind, kann ich das erfolgreich empfangen und verarbeiten
Wenn die Daten etwas größer sind, wird eine Meldung angezeigt: „Das Speicherlimit beträgt 128 Mio.“Ich habe einige Methoden im Internet überprüft. Bei den meisten handelt es sich um die Änderung von memory_limit=-1 in Die
php.ini
-Datei.
Aber nach der Änderung kann sie immer noch nicht übertragen werdenphp.ini
文件中memory_limit=-1
可是改了之后仍然无法传输
目前跟雷达端商量的是他每次最多给我传10W组点,然后再多个一个参数本次传输还剩多少点
Die aktuelle Diskussion mit dem Radarterminal ist, dass er mir jedes Mal maximal
10W
Gruppenpunkte senden kann , und fügen Sie dann einen weiteren Parameter hinzu Wie viele Punkte sind in dieser Übertragung übrig
, nachdem PHP es empfangen hat, wird es ihm als Rückgabewert übergeben, und er ruft zurück und sendet es weiterhin an mich . Auf diese Weise berechnet werden jedoch insgesamt 14 bis 15 Übertragungen erforderlich sein, um einen Datensatz zu senden ... und die Machbarkeit ist noch nicht sicher
PHP中文网2017-05-27 17:44:31
ini_set('memory_limit', '500M'); //内存限制
set_time_limit(0); //执行超时,0代表无限等待
滿天的星座2017-05-27 17:44:31
web服务器接收Body有长度限制,超长不能接收, 比如nginx-client_max_body_size
web模式下采用分批传输是比较好的方案
更好的方式是用socket二进制传输, 没有web模式下的各种限制, 效率较高
仅有的幸福2017-05-27 17:44:31
首先你这字符串占用内存就很大了,你再转换为数组处理占用内存会非常大的。
看你的需求,最后是转换为json存到文件,json也是字符串,为何不直接字符串处理呢。
如果是php7的话不能使用preg_replace,需要换成preg_replace_callback来处理
$str=$_POST['str'];//点的4个属性组成的字符串
$json_str = '['.substr(preg_replace('/([^,]+),([^,]+),([^,]+),([^,]+),/iU','{"x":"$1","y":"$2","a":"$3","p":"$4"},',$str.','),0,-1).']';
//将json字符串保存在```.txt```文件中
$handle=fopen("./1.txt","w");
fwrite($handle, $json_str);
fclose($handle);