Jump to content

slipstream180

New Members
  • Posts

    4
  • Joined

  • Last visited

    Never

Everything posted by slipstream180

  1. Hi All - I'm encountering a problem where I'm able to get the IPC message queue functions (msg_receive(), msg_send(), etc) working when running PHP on Ubuntu v9.04 Desktop, but on MacOS X v10.5.7 the msg_get_queue() function fails to retrieve the same message queue Resource across different PHP files. Here is the test code I am using, which is taken from the "PHP Core Programming" book: msg_server.php: <?php define ("SERVER_QUEUE", 1970); define ("MSG_SHUTDOWN", 1); define ("MSG_TOUPPER", 2); define ("MSG_HELLO", 3); $queue = msg_get_queue(SERVER_QUEUE); $keepListening = true; while($keepListening) { msg_receive($queue, 0, $type, 1024, $message, true, 0, $error); switch ($type) { case MSG_SHUTDOWN: $keepListening = false; break; case MSG_HELLO: error_log($message . " says hello.\n", 0); break; case MSG_TOUPPER: $clientQueue = msg_get_queue($message['caller']); $response = strtoupper($message['text']); msg_send($clientQueue, MSG_TOUPPER, $response); if ($error != null) error_log("MSG_TOUPPER ERROR: $error\n", 0); break; } // end switch } // end while msg_remove_queue($queue); ?> Then in a separate file, 'msg_client.php': <?php define ("SERVER_QUEUE", 1970); define ("MSG_SHUTDOWN", 1); define ("MSG_TOUPPER", 2); define ("MSG_HELLO", 3); $qid = rand(1, 10000); $queue = msg_get_queue($qid); $serverQueue = msg_get_queue(SERVER_QUEUE); msg_send($serverQueue, MSG_HELLO, $qid); msg_send($serverQueue, MSG_TOUPPER, array('caller' => $qid, 'text' => 'corephp')); msg_receive($queue, 0, $type, 1024, $message); msg_send($serverQueue, MSG_SHUTDOWN, NULL); msg_remove_queue($queue); ?> In this example, when running on Mac OS X, the server file never responds to the initial msg_send from msg_client.php. (Since the msg_get_queue() doesn't seem to access a common underlying queue for the "server". i.e. msg_get_queue(SERVER_QUEUE) returns a different resource in msg_client.php vs msg_server.php) The MacOS X LAMP stack is configured with the following versions of software: Apache/2.0.59 (Unix) PHP/5.2.5 DAV/2 mod_ssl/2.0.59 OpenSSL/0.9.7l The Ubuntu stack configuration: Apache/2.2.11 (Ubuntu) PHP/5.2.6-Ubuntu4.1 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g I don't know if this problem is a function of the underlying OS, or Apache, or something else... We are using Ubuntu to serve our website, but we also use Mac OS X for development & prototyping, so we need identical functionality across platforms. Thanks for any ideas in advance!
  2. OK. I think I understand that code snippet and that displaying a form and grabbing the resulting POSTs are two different things. However, does that mean there's really no way to return the POSTed values back to my calling function? (If I try something like your code snippet there, the function executes the code before the POSTed variable is captured and a NULL is returned to the calling function)
  3. Here's all of prompt_user(), including HTML code: function prompt_user($message) { if ($_POST['submit'] == null) { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Prompt User</title> </head> <body> <form id="message_form" action="path_to_G/G.php" method="post" name="msg_form" > <div> <table border="0"> <tr> <td align="right" valign="top"><b>Choose an option</b></td> <td valign="top" align="left"> <select name="election" id="user_select" > <?php if (isset($message['options'])) { foreach ($message['options'] as $option => $label) echo "<option value=\"$option\">$label</option>\n"; } // end if ?> </select></td> </tr> <tr> <td align="right" valign="top"><b></b></td> <td valign="top" align="left"> <input name="submit" value="Submit" type="submit" /></td> </tr> </table> </div> </form> </body> </html> <?php } else { echo "election: " . $_POST['election'] . "<br />"; return $_POST['election']; } } // end prompt_user So, I am POSTing to G.php. However, if I POST to A.php, it calls a function a(), which does the same kind of thing prompt_user() does. (extract POSTed values and pass them on to another function). As a result, trying to return $_POST['election'] to A.php results in a functional error.
  4. I’m having trouble displaying a form from within a nested function – maybe somebody’s faced this before. Here’s the setup: I have an initial starting page – let’s call it A.php. Pathname for A.php: Localhost/A.php A.php contains a form that extracts input from the client then processes it by calling a function – b(). b() kicks off some processing which nests down to a function f(). Once at f(), we then want to go back to the client and ask for some more input, before branching: function f() { Require_once ‘path_to_G/G.php’; $result = prompt_user($options); If ($result == ‘a’) { // do A } else { // do B } } // end f() prompt_user() is in G.php: <?php function prompt_user($options) { ?> HTML form here <?php if (isset($_POST[‘submit’])) { // Capture users’ selection $response = $_POST[‘choice’]; return $response; } >? If I try to execute this code, prompt_user() simply returns a null value without waiting for a response from the client. The form is displayed (the URI shows ‘localhost/A.php’) but when the “Submit” button is pushed, the client browser loads ‘path_to_G/G.php’ and quits. How do I get my form displayed, and capture what’s POSTed without prompt_user() returning prematurely? I’ve also tried first redirecting to G.php before trying to throw up the form, but then the program stack is lost and I can’t get the $response back to the calling function. (f()) Any ideas?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.