PHP mengendalikan masalah had memori data yang sangat panjang
迷茫
迷茫 2017-05-27 17:42:31
0
5
844

Pada masa ini terdapat beberapa peranti radar yang mengimbas kawasan tertentu Selepas mengimbas, data kira-kira 1.4 juta mata (setiap titik mengandungi 4 atribut) akan dikembalikan.
Kemudian peralatan radar menyambung data menjadi , 分隔的字符串:"x1,y1,a1,p1,x2,y2,a2,p2......x1400000,y1400000,a1400000,p1400000"
Saiz rentetan ini hendaklah berpuluh-puluh megabait, kurang daripada 100 megabait.
Kod PHP diproses seperti ini:

$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;

Saya tidak tahu sangat tentang penggunaan memori, dan ini adalah kali pertama saya memproses jumlah data yang begitu besar
Apabila data yang dihantar oleh radar hanya 11Wtitik kumpulan (kira-kira 3MBdata), saya boleh berjaya menerima dan memprosesnya
Apabila Selepas data menjadi lebih besar sedikit, ia menggesa Had memori ialah 128M
Saya menyemak beberapa kaedah di Internet, kebanyakannya adalah untuk menukar memory_limit=-1php.ini>php.ini文件中memory_limit=-1
可是改了之后仍然无法传输
目前跟雷达端商量的是他每次最多给我传10W组点,然后再多个一个参数本次传输还剩多少点Tetapi selepas menukarnya, ia masih tidak dapat dihantar
Pada masa ini, perbincangan dengan terminal radar ialah dia boleh menghantar saya maksimum
10W

mata kumpulan setiap satu masa, dan kemudian tambah satu lagi parameter Berapa banyak mata yang tinggal dalam penghantaran ini?, selepas PHP menerimanya, ia akan diberikan kepadanya sebagai nilai pulangan, dan dia akan memanggil semula dan terus menghantarnya pada saya. Walau bagaimanapun, dikira dengan cara ini, ia memerlukan 14 hingga 15 penghantaran untuk menghantar satu set data pembangunan? 🎜Menunggu dalam talian. . . 🎜
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(5)
Ty80
ini_set('memory_limit', '500M'); //内存限制
set_time_limit(0); //执行超时,0代表无限等待
phpcn_u1582

Soalan: Adakah gzip didayakan? Data JSON tulen jenis ini mempunyai kadar mampatan yang tinggi selepas ia dihidupkan. Selepas menukar had memori, sambungan rangkaian juga mungkin tamat masa.

滿天的星座
  1. Ada had panjang badan yang diterima oleh pelayan web Jika terlalu panjang, ia tidak boleh diterima, seperti nginx-client_max_body_size

  2. .
  3. Penghantaran kelompok ialah penyelesaian yang lebih baik dalam mod web

  4. Cara yang lebih baik ialah menggunakan penghantaran binari soket, yang tidak mempunyai pelbagai sekatan dalam mod web dan lebih cekap

仅有的幸福

Pertama sekali, rentetan anda menggunakan banyak memori Jika anda menukarnya kepada tatasusunan, ia akan mengambil banyak memori.

Bergantung pada keperluan anda, langkah terakhir ialah menukarnya kepada json dan menyimpannya ke fail Json juga merupakan rentetan, jadi mengapa tidak memprosesnya secara langsung sebagai rentetan.

Jika ia php7, anda tidak boleh menggunakan preg_replace dan perlu bertukar kepada preg_replace_callback untuk mengendalikannya

$str=$_POST['str'];//点的4个属性组成的字符串
$json_str = '['.substr(preg_replace('/([^,]+),([^,]+),([^,]+),([^,]+),/iU','{"x":"","y":"","a":"","p":""},',$str.','),0,-1).']';
//将json字符串保存在```.txt```文件中
$handle=fopen("./1.txt","w");
fwrite($handle, $json_str);
fclose($handle);
伊谢尔伦

Besarkan had memori dan tingkatkan volum data siaran. . Pada asasnya, tiada masalah untuk mengendalikan beberapa ratus megabait

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan