SV: [PHP] Pass variable to pcntl_fork child
| From: | Uggla Henrik | Date: | Wed, 02 Jul 2014 14:37:06 +0000 |
| Subject: | SV: [PHP] Pass variable to pcntl_fork child | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-323588@lists.php.net to get a copy of this message | ||
I switched places of the parent and child code. The parent always did what it was supposed to, the
child never did.
/H
________________________________________
Från: Sebastian Krebs [krebs.seb@gmail.com]
Skickat: den 2 juli 2014 12:29
Till: Uggla Henrik
Kopia: php-general@lists.php.net
Ämne: Re: [PHP] Pass variable to pcntl_fork child
2014-07-02 11:40 GMT+02:00 Uggla Henrik <Henrik.Uggla@kristianstad.se>:
> Hi!
>
> I've tried the following code but the $call variable is not available in
> the pcntl_fork child. Searching the web, I've found posts that claim that
> all variables defined before pcntl_fork are copied to the child.
Not directly "copied", at least not explicitely. 'pcntl_fork()' is derived
from the system call 'fork()', which roughly behave like this
- pause execution
- Create a second (child-)process B
- _clone_ the _entire_ memory used by this process A to the memory of B
- resume execution
So after forking the child process it is an exact clone of the parent,
including all variables and stuff. The only difference is the PID and
therefore (somehow) the return value of pctnl_fork().
This said: Yeah, $call should be there. Have a look at http://3v4l.org/cV73d
That only works for HHVM there, but I promise you, that I had reproduced it
locally with PHP5.5 ;)
I've also found posts that claim that no variables are passed/copied to the
> child. So, which of them is true and how should I correct my code to make
> it work?
>
Maybe a different question: How did you fount out, that $call doesn't
contain, what you expected? What was the error?
>
> regards
> Henrik
>
>
>
> $call = str_replace('@@', '&', $_GET['call']);
>
> if ($pid = pcntl_fork())
> {
> $previousCalls=file("calls.txt", FILE_IGNORE_NEW_LINES |
> FILE_SKIP_EMPTY_LINES);
> if (!in_array($call, $previousCalls))
> {
> file_put_contents("calls.txt", $call."\n", FILE_APPEND);
> }
> }
> else
> {
> function displayUrl($url)
> {
> $ch = curl_init($url);
> curl_setopt ( $ch, CURLOPT_HEADER, 1);
> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
> $curlResult = curl_exec($ch);
> curl_close($ch);
> list($headers,$content) = explode("\r\n\r\n",$curlResult,2);
> foreach (explode("\r\n",$headers) as $hdr)
> {
> if ($hdr != 'Transfer-Encoding: chunked')
> {
> header($hdr);
> }
> }
> echo $content;
> }
> displayUrl($call);
> }
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
github.com/KingCrunch