ホームページ > バックエンド開発 > PHPチュートリアル > 异步 - php的 popen 函数问题

异步 - php的 popen 函数问题

WBOY
リリース: 2016-06-06 20:34:24
オリジナル
1405 人が閲覧しました

我用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>
ログイン後にコピー
ログイン後にコピー

原来我在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>
ログイン後にコピー
ログイン後にコピー

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

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート