繁体   English   中英

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

[英]How to echo only Once on Page in Function in PHP?

这是我的功能:

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循环中一次输出某些内容,但是由于该函数只是递归运行,直到超时,该函数又重新开始,因此不起作用。

就像我说的那样,我可以在此函数中插入变量数组以帮助我...但是考虑到该函数重新启动并每次都重新运行,我不确定如何做到这一点。

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

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

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

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

$count = $previousProgress++;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM