Heim > Backend-Entwicklung > PHP-Tutorial > 异步 - php的 popen 函数问题

异步 - php的 popen 函数问题

WBOY
Freigeben: 2016-06-06 20:34:24
Original
1419 Leute haben es durchsucht

我用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>
Nach dem Login kopieren
Nach dem Login kopieren

原来我在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>
Nach dem Login kopieren
Nach dem Login kopieren

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

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

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage