Re: about lock some codes.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/27/2012 7:05 AM, Maciek Sokolewicz wrote:
On 27-09-2012 11:31, lx wrote:
Hello:
        I have a question now.the code is:

                 $ftemp = fopen("$fdoc_tmp/temp_proxy", 'w');
                 fwrite($ftemp, $content);
                 fclose($ftemp);

                 exec("/usr/local/bin/gdnsproxy -a -f
$fdoc_tmp/temp_proxy
1>$fdoc_tmp/dout 2>$fdoc_tmp/derr", $data, $ex_result);
                 echo "ret=".$ex_result;

As you see, If a process run these,this is right.But two processes run
this
codes.
the order maybe is:
1.process 1 create the temp_proxy1
2.process 2 create the temp_proxy2
3.process 1 exec temp_proxy2
4.process 2 exec temp_proxy2

The temp_proxy1 can't exec.

So,I want to know how to solve it.
Thank you.


Well, there are basically 2 ways:
1. introduce locking; you can lock the file and have the other script
check if the file is locked. If so > have it usleep() and check again.
2. If you can run gdnsproxy in parallel, you could instead change the
script to make $fdoc_tmp/temp_proxy unique for that script. So instead
of just writing, you first check if the file exists, if so, create a
file with a different (non-existent) name and then try again. Otherwise,
use the first name. Then pass the 'unique' name to gdnsproxy.
Even simpler - use the 'tempnam' or 'tmpfile' functions to always have a unique name and avoid having to check for an existing file.

Amazing what the php Manual has in it...

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux