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