OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
php-general Digest 2 Oct 2008 10:53:45 -0000 Issue 5714

php-general-digest-helplists.php.net
Date: Thu Oct 02 2008 - 05:53:45 CDT


php-general Digest 2 Oct 2008 10:53:45 -0000 Issue 5714

Topics (messages 281353 through 281358):

Re: SESSION array problems
        281353 by: Nathan Rixham
        281355 by: Jim Lucas

Re: Questions regarding limits of processes launched bysystem, exec,passthru ...
        281354 by: Valentin Schmid - ICSurselva AG

Re: store array into session variable and get it back later
        281356 by: Stut

php server push
        281357 by: gkrisz.upcmail.hu
        281358 by: Nathan Rixham

Administrivia:

To subscribe to the digest, e-mail:
        php-general-digest-subscribelists.php.net

To unsubscribe from the digest, e-mail:
        php-general-digest-unsubscribelists.php.net

To post to the list, e-mail:
        php-generallists.php.net

----------------------------------------------------------------------

attached mail follows:


tedd wrote:
> At 3:41 PM -0400 10/1/08, tedd wrote:
>>> What about:
>>>
>>> foreach ($_SESSION['user_id'] as $key => $value)
>>> {
>>> $last = $_SESSION['last_name'][$key];
>>> $first = $_SESSION['first_name'][$key];
>>> echo "$last, $first";
>>> }
>>
>> Jay:
>>
>> Close, it produced:
>>
>> Array, Array
>> Array, Array
>> Array, Array
>>
>> Cheers,
>>
>> tedd
>
>
> My error, if produced.
>
>
> Cable, Diane
> a, i
>
> While print_r($_SESSION); JUST BEFORE IT produced:
>
> [user_id] => Array
> (
> [0] => 6156
> [1] => 7030
> [2] => 656
> )
>
> [first_name] => Array
> (
> [0] => Diane
> [1] => first name
> [2] => Helen
> )
>
> [last_name] => Array
> (
> [0] => Cable
> [1] => CagoEsogs-temp (forum)
> [2] => Cahalane
> )
>
> Now, what wrong with this picture?
>
> Cheers,
>
> tedd

tedd wrote:
> At 3:41 PM -0400 10/1/08, tedd wrote:
>>> What about:
>>>
>>> foreach ($_SESSION['user_id'] as $key => $value)
>>> {
>>> $last = $_SESSION['last_name'][$key];
>>> $first = $_SESSION['first_name'][$key];
>>> echo "$last, $first";
>>> }
>>
>> Jay:
>>
>> Close, it produced:
>>
>> Array, Array
>> Array, Array
>> Array, Array
>>
>> Cheers,
>>
>> tedd
>
>
> My error, if produced.
>
>
> Cable, Diane
> a, i
>
> While print_r($_SESSION); JUST BEFORE IT produced:
>
> [user_id] => Array
> (
> [0] => 6156
> [1] => 7030
> [2] => 656
> )
>
> [first_name] => Array
> (
> [0] => Diane
> [1] => first name
> [2] => Helen
> )
>
> [last_name] => Array
> (
> [0] => Cable
> [1] => CagoEsogs-temp (forum)
> [2] => Cahalane
> )
>
> Now, what wrong with this picture?
>
> Cheers,
>
> tedd

in this case.. what's happened is:
$_SESSION['first_name'] is a reference to a variable $first (or whatever
is in your for loop)
$_SESSION['last_name'] is a reference to a variable $last (or whatever
is in your for loop)

when you've set $last and $first to string's in the for loop it's passed
the variable by reference back to $_SESSION['first_name'] and
$_SESSION['last_name'] as strings;

when it hit's the second iteration on the for loop it now has strings to
deal with so uses the $key (holding integer 1 at this stage) as a string
offset thus giving you the second character (offset [1]) of the string
variables $last/$first. now set to 'cable'/'diane' thus giving you the
'a'/'i'. when it does pass three there is no offset [2] so gives you
nothing.

*phew*

reproduce code!

<?php

$userids = array('6156','1234','8867');
$first = array('Diane','Big','Joe');
$last = array('Cable','Ron','Dirt');

function save_to_session( ) {
  global $userids , $first , $last;
  $_SESSION['user_id'] = &$userids;
  $_SESSION['first_name'] = &$first;
  $_SESSION['last_name']= &$last;
}

save_to_session( );

print_r( $_SESSION );

$num_users = count($_SESSION['user_id']);

for ($i = 0; $i < $num_users; $i++) {
     $first = $_SESSION['first_name'][$i];
     $last = $_SESSION['last_name'][$i];
     echo "$last, $first\n";
}
?>

Regards!

--
nathan ( nathankraya.co.uk )
{
   Senior Web Developer
   php + java + flex + xmpp + xml + ecmascript
   web development edinburgh | http://kraya.co.uk/
}

attached mail follows:


tedd wrote:
> Hi gang:
>
> Apparently, there's something going on here that I don't understand --
> this happens far too often these days.
>
> Here's a print_r($_SESSION); of the session arrays I'm using:
>
> [user_id] => Array
> (
> [0] => 6156
> [1] => 7030
> [2] => 656
> )
>
> [first_name] => Array
> (
> [0] => Diane
> [1] => Fred
> [2] => Helen
> )
>
> [last_name] => Array
> (
> [0] => Cable
> [1] => Cago
> [2] => Cahalan
>
>
> The following is how I tried to access the data contained in the
> $_SESSION arrays:
>
> $num_users = count($_SESSION['user_id']);
>
> for ($i = 0; $i < $num_users; $i++)
> {
> $last_name = $_SESSION['last_name'][$i];
> $first_name = $_SESSION['first_name'][$i];
> echo("<p>$last_name, $first_name</p>");
> }
>
> The only thing that came out correct was the first echo. The remaining
> echos had no values for $first_name or $last_name.
>
> What's happening here?
>
> Cheers,
>
> tedd
>
>
> PS: I'm open to other suggestions as to how to do this.

Why don't you echo what you are trying to access for each loop

for ($i = 0; $i < $num_users; $i++)
     {
     print_r($_SESSION['last_name'][$i]);
     print_r($_SESSION['first_name'][$i]);
     }

Does the above return to you what you would expect?

An alternate to what you are doing here would be this.

foreach ( $_SESSION['user_id'] AS $i=>$id)
     {
     print_r($id);
     print_r($_SESSION['last_name'][$i]);
     print_r($_SESSION['first_name'][$i]);
     }

How about this?

Jim Lucas

attached mail follows:


Hello Thodoris,

>
>> Hello all again,
>>
>> It seems that Problem can only be solved by one of the following ways:
>>
>> 1. Don't use mod_php; use CGI or FastCGI instead. Then it would be
>> possible to limit the resources via RLimitCPU / RLimitMEM.
>>
>
> I haven't tried that but as I have noticed in the reference that
> probably mod_php's processes get limited too:
>
> This applies to processes forked off from Apache children servicing
> requests, not the Apache children themselves.
> This includes CGI scripts and SSI exec commands, but not any processes
> forked off from the Apache parent such as piped logs.
>
> It says that it includes CGI but it doesn't exclude necessarily mod_php.
> Does it ?
No, it doesn't.

attached mail follows:


On 1 Oct 2008, at 20:42, Per Jessen wrote:
> Stut wrote:
>> On 1 Oct 2008, at 11:40, Per Jessen wrote:
>>> Alain Roger wrote:
>>>
>>>> how can i get the 'name' value for each row in this session stored
>>>> array ? thx.
>>>
>>> You haven't stored an array in the session, you've tried to store an
>>> object of class CBreadcrumb. Which AFAIK isn't supported.
>>
>> It is supported but you need to be careful about resources in the
>> class. You can handle these gracefully using the __sleep and __wake
>> magic methods. You also need to make sure the class has been loaded
>> before starting the session or have an __autoload defined.
>
> Thanks, I was not aware. Very clear and succinct explanation, btw.

No worries. I find it best to limit myself to responding quickly,
otherwise I get nothing else done! It also forces me to get straight
to the point.

-Stut

--
http://stut.net/

attached mail follows:


Hi, (i hope this is the right place to ask questions like below)

I am trying to use content type 'multipart/x-mixed-replace' to
achive server pushing and I have the following piece of code, which works perfectly.

/* file.html */
function handleContent(event)
{
  var result = event.target.responseXML;
}

var xrequest = new XMLHttpRequest();
xrequest.multipart = true;
xrequest.open("GET","file.php",true);
xrequest.onload = handleContent;
xrequest.send(null);

/* file.php */

<?php
  header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');
  print "--rn9012\n";

  /*
        With these prints i can generate an event on the browser side.
        For instance if I would like to wait for sg to happen on the server side i can
        make an infinite loop and wait. when sg happens i just print the event.

  */
  while (true) {
    print "Content-type: application/xml\n\n";
    print "<?xml version='1.0'?>\n";
    print "<content>event1</content>\n";
    print "--rn9012\n";
    flush();ob_flush();
  }

  sleep(5);

  /* I close the connection with this event. Closing tag: with 2 extra -- */
  print "Content-type: application/xml\n\n";
  print "<?xml version='1.0'?>\n";
  print "<content>last event</content>\n";
  print "--rn9012--\n";

?>

BUT I have to keep an infinite loop on the server side for each clients
just to be able to send and event (let's say in every 3rd hour)

Is there a way with which i can keep the connection without the infinite loop,
and send the event message to the client from a different php file?

/* file2.php */
<?php
        /* this is what i wish */
        send_event_toclient(clientid, eventmessage);
        //clientid: id of the client that i had saved before
        //i think this id should be sg socket where i can write the output to.

?>

I hope I cound explain my problem clearly
thank you in advance

Christian Guttmann

attached mail follows:


gkriszupcmail.hu wrote:
> Hi, (i hope this is the right place to ask questions like below)
>
> I am trying to use content type 'multipart/x-mixed-replace' to
> achive server pushing and I have the following piece of code, which works perfectly.
>
> /* file.html */
> function handleContent(event)
> {
> var result = event.target.responseXML;
> }
>
> var xrequest = new XMLHttpRequest();
> xrequest.multipart = true;
> xrequest.open("GET","file.php",true);
> xrequest.onload = handleContent;
> xrequest.send(null);
>
> /* file.php */
>
> <?php
> header('Content-type: multipart/x-mixed-replace;boundary="rn9012"');
> print "--rn9012\n";
>
>
> /*
> With these prints i can generate an event on the browser side.
> For instance if I would like to wait for sg to happen on the server side i can
> make an infinite loop and wait. when sg happens i just print the event.
>
> */
> while (true) {
> print "Content-type: application/xml\n\n";
> print "<?xml version='1.0'?>\n";
> print "<content>event1</content>\n";
> print "--rn9012\n";
> flush();ob_flush();
> }
>
>
> sleep(5);
>
> /* I close the connection with this event. Closing tag: with 2 extra -- */
> print "Content-type: application/xml\n\n";
> print "<?xml version='1.0'?>\n";
> print "<content>last event</content>\n";
> print "--rn9012--\n";
>
> ?>
>
> BUT I have to keep an infinite loop on the server side for each clients
> just to be able to send and event (let's say in every 3rd hour)
>
> Is there a way with which i can keep the connection without the infinite loop,
> and send the event message to the client from a different php file?
>
> /* file2.php */
> <?php
> /* this is what i wish */
> send_event_toclient(clientid, eventmessage);
> //clientid: id of the client that i had saved before
> //i think this id should be sg socket where i can write the output to.
>
> ?>
>
> I hope I cound explain my problem clearly
> thank you in advance
>
> Christian Guttmann
>

ahh an age old problem; in short you need something like "meteor" to
handle this (a different http server); tbh the http protocol isn't cut
out for this.

You may want to save some time and look into XMPP with PUB-SUB; it's
lightweight permanent client server connection with server push (ignite
realtime/jive software do a great XMPP server that's opensource ;)

Regards and sorry for the vagueness - there are tonnes of articles
everywhere on the net documenting the problems; this is why everybody
poll's all the time.

if you do want a strictly PHP resolution then look into making your own
multiprocess daemon with socket stream server / client and the stream_
functions - rather complicated and not a "standard" way fo doing things,
but fun :)

--
nathan ( nathankraya.co.uk )
{
   Senior Web Developer
   php + java + flex + xmpp + xml + ecmascript
   web development edinburgh | http://kraya.co.uk/
}