Autor Zpráva
Danqo
Profil
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
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ť?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: