类似exec()的PHP回调函数,每行实时输出

标签 php

我正在寻找一个 php 函数或解决方法,它允许您为执行输出的每一行创建一个回调函数。我能找到的最好的是 proc_open(),但它只允许我在调用 fgets() 时按指定字节输出,以获取输出。如果我在 fgets() 中放置的字节太小,它会将一行分成多行;太大会延迟回调。

PHP 中是否有一个函数允许我在每个输出行调用我的回调函数,类似于 proc_open? Exec() 函数是一个很好的例子,因为它可以将每一行放入一个数组中,但它无法在创建每个索引时提供回调。

最佳答案

您可以通过使用回调调用从 exec 返回的每一行来创建自己的代码。见下文

function exec_callback($command, $callback){
    $array = array();
    exec($command, $array, $ret);
    if(!empty($array)){
        foreach ($array as $line){
            call_user_func($callback, $line);
        }
    }
}

// example to use
function print_lines($line){
    echo "> $line\n";
}

exec_callback("ls -l /", 'print_lines');

关于类似exec()的PHP回调函数,每行实时输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11185614/

相关文章:

php - 如何在引用两列时为 td 添加一个类

php - 生成随机的唯一序列

php - 如何使用 Summernote 使用 PHP 防止危险的 HTML 输入?

php - 从 Laravel 范围查询中排除连接列 ONLY_FULL_GROUP_BY 错误

php - 根据另一个表或字段中的数组中的记录保存 id

php - 从 javascript 调用 php 并将数组从 php 返回到 Javascript 函数

php - 试图让 PHP 复选框保存 MySQL 表中的数据

php - Yii2 加入 4 个表的关系

php - 意外的 T_CONCAT_EQUAL

php - PHPUnit 模拟对象是否可以替换类中创建的对象?