如何仅在PHP函数中仅在页面上回显?

时间:2019-01-22 01:35:18

标签: php function curl

这是我的功能:

curl_setopt( $curl, CURLOPT_PROGRESSFUNCTION, function ( $resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($array)
{
static $previousProgress = 0;

    if ( $download_size == 0 ) {
        $progress = 0;
    } else {
        $progress = round( $downloaded_size * 100 / $download_size );
    }

如您所见,我在函数末尾用use插入了自己的变量。

我想做的只是在else条件之后回显此行

echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') ';

我尝试过诸如

static $previousProgress = 0;
$count = $previousProgress++;

    } else {
    if ($count == 1) { echo echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
        $progress = round( $downloaded_size * 100 / $download_size );
    }

但是,在达到else条件之前,此功能已经运行了未知次数(有时50次,有时60次)。

我当然可以做到

static $previousProgress = 0;
    $count = $previousProgress++;
    if ($count == 1) { echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }

它只回显一次。.但问题是CURL没有设置$downloaded_size$download_size变量并显示为0 bytes-因此需要处于else状态。

我尝试使用true / false变量,因为通常会在forforeach循环中输出一次,但是由于函数只是递归运行,直到超时,该功能再次重新开始,这不起作用。

正如我所说,我可以在此函数中插入变量数组以帮助我...但是由于函数重新启动并每次都重新运行,因此我不确定如何做到这一点。

尝试了其他随机的东西,但是我显然缺少了一些东西。如何在重复功能中仅回显一次下载大小?

1 个答案:

答案 0 :(得分:1)

静态布尔变量应该可以执行您想要的操作。

static $firstTime = true;
if ($firstTime) {
    echo "something";
    $firstTime = false;
}

您的代码存在问题,可能是因为您使用的是后递增。如果$previousProgress0,则行:

$count = $previousProgress++;

$count设置为0的同时将$previousProgress设置为1(旧值)。因此,if ($count == 1)条件直到 second 迭代才成立。 如果您使用++$previousProgress,则会将它们都设置为1。那就是前增加和后增加之间的区别。