Re: Re: Pass variable to pcntl_fork child
| From: | Aziz Saleh | Date: | Wed, 02 Jul 2014 14:57:17 +0000 |
| Subject: | Re: Re: Pass variable to pcntl_fork child | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-323590@lists.php.net to get a copy of this message | ||
On Wed, Jul 2, 2014 at 10:41 AM, Jim Giner <jim.giner@albanyhandball.com>
wrote:
> On 7/2/2014 5:40 AM, Uggla Henrik wrote:
>
>> 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. 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?
>>
>> 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);
>> }
>>
>> 1 What's a child?
> 2 You must use == in your if condition.
> 3 ??? Why do you have a function defined in your else clause???
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
The only issue I see in your code is that the parent is not waiting for the
child to close, which can cause zombies. Add:
pcntl_wait($status);
As shown here: http://www.php.net/manual/en/function.pcntl-fork.php
Also you are not checking if the fork failed (-1), shown on the above
example.
Your code with the wait works fine for me (outputs data and records data in
the file).