Autor | Zpráva | ||
---|---|---|---|
Danqo Profil |
#1 · Zasláno: 28. 7. 2010, 09:23:02
Zdravím mám taký problém vyťahujem zo shared memory dáta, ktoré následne potrebujem u klienta vypísať, testovania ukázali, že ide všetko až na premennú $packet tá sa pri každom zavolaní funkcie getData vypíše iba raz, aj keby sa mala vypísať n-krát Keď som tam dal nejakú inú hodnotu tak sa v pohode n-krát vypísala. Taktiež ak som dal za premennú packet nejaký string, tak ho nevypísal... Neviete čím to môže byť? Nejaký zlý typ premennej, alebo čo?
<?php function putData($sender,$receiver,$type,$packet){ set_time_limit(0); /* It saves information about last ID main shared memory */ $id_last_sended = 9010; $last_sended = 10; $last_sended_open = shmop_open($id_last_sended, "c", 0644, 3); $last_sended = shmop_read($last_sended_open, 0,3); settype($last_sended, "integer"); if($last_sended<100) $last_sended = 100; $last_sended<200 ? $last_sended++ : $last_sended=100; $last_sended_new = shmop_write($last_sended_open, $last_sended, 0); /* It saves information which came from UDP */ $main_shm = shmop_open($last_sended, "c", 0644, 1024); $send_packet = $sender."_".$receiver."_".$type."_".$packet; $shm_packet_write = shmop_write($main_shm, $send_packet, 0); //if($shm_packet_write) shmop_delete($last_sended_open); shmop_close($last_sended_open); return("Packet was successfully sent").$last_sended; } function getData($last_read_id) { set_time_limit(0); $id_last_sended = 9010; $last_sended_open = shmop_open($id_last_sended, "a", 0644, 3); shmop_size($last_sended_open)!=0 ? $last_sended = shmop_read($last_sended_open,0,3) : $last_sended = 100; settype($last_sended, "integer"); if($last_read_id!=$last_sended) // If there is new message { $last_read_id<$last_sended ? $unread_messages = $last_sended-$last_read_id : $unread_messages = $last_read_id-$last_sended; $i=0; while($i<$unread_messages && $last_read_id >99) { $id_packet = $last_sended - $i; $open_packet = shmop_open($id_packet,"a",0,0); $message = shmop_read($open_packet,0,1024); list($sender,$receiver,$type,$packet) = explode("_",$message); $msg .= "<br>".$sender." to ".$receiver." ".$packet; $i++; } } return $msg; } $server = new SoapServer("data.wsdl"); $server->addFunction("putData"); $server->addFunction("getData"); $server->handle(); ?> |
||
Danqo Profil |
#2 · Zasláno: 28. 7. 2010, 09:42:00
Tak už som prišiel na to, čo to spôosobuje shmop_read vracia $packet a k nemu pripojí aj neexistujúce znaky aby počet presne spĺňal stanovenú hranicu shmop_open čo je v mojom prípade 1024b takze packet obsahuje string + k tomu ten zvysok bytov... neviete mi ale poradiť ako sa týchto nepotrebných znakov mám zbaviť?
|
||
Časová prodleva: 14 let
|
0