Home > Backend Development > PHP Tutorial > 异步 - php的 popen 函数问题

异步 - php的 popen 函数问题

WBOY
Release: 2016-06-06 20:34:24
Original
1405 people have browsed it

我用popen函数来异步执行PHP代码

<code>//a.php
<?php for($i; $i<10; $i++)
{
    $open = popen('php b.php -a $argv1 -b $argv2','r');
    fread( $open, 1000 );//这里为什么要读数据才可以执行b.php的代码?
    pclose( $open );
}
?>
//b.php
<?php $argv = getopt("a:b:c:");
echo $argv['a'],$argv['b'],$argv['c'];
sleep(5);
?>
</code>
Copy after login
Copy after login

原来我在b.php的代码是更新数据库(因为逻辑太复杂所以没有帐号上来.),但是只有在a.php 执行fread $open才能正常执行b.php的代码.如果去掉fread 就没有执行.(数据库里没有更新)

更新:好像把pclose放远点又可以正常执行了.看来是执行b.php代码要点时间,如果提早关闭了会影响执行,是这个原因吗?

回复内容:

我用popen函数来异步执行PHP代码

<code>//a.php
<?php for($i; $i<10; $i++)
{
    $open = popen('php b.php -a $argv1 -b $argv2','r');
    fread( $open, 1000 );//这里为什么要读数据才可以执行b.php的代码?
    pclose( $open );
}
?>
//b.php
<?php $argv = getopt("a:b:c:");
echo $argv['a'],$argv['b'],$argv['c'];
sleep(5);
?>
</code>
Copy after login
Copy after login

原来我在b.php的代码是更新数据库(因为逻辑太复杂所以没有帐号上来.),但是只有在a.php 执行fread $open才能正常执行b.php的代码.如果去掉fread 就没有执行.(数据库里没有更新)

更新:好像把pclose放远点又可以正常执行了.看来是执行b.php代码要点时间,如果提早关闭了会影响执行,是这个原因吗?

试试 pclose(popen("php b.php -a $argv1 -b $argv2 &",'r'));

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template