If you use the command line interface (CLI SAPI), you may be interested by the 3 standard input/output streams (STDIN, STDOUT & STDERR) described at: https://www.php.net/manual/en/features.commandline.io-streams.php(PHP 5, PHP 7, PHP 8)
fprintf — Escreve uma string formatada para um fluxo
   Escreve uma string produzida de acordo com o formato em format
   para o recurso de fluxo especificado por stream.
  
streamUm resource de ponteiro do sistema de arquivos que normalmente é criado usando fopen().
format
   A string de formato é composta de zero ou mais diretivas:
   caracteres comuns (excluindo %) que são
   copiados diretamente para o resultado e especificações
   de conversão, cada uma das quais resulta na busca de seu
   próprio parâmetro.
  
   Uma especificação de conversão segue este protótipo:
   %[argnum$][flags][width][.precision]especificador.
  
    Um número inteiro seguido por um cifrão $,
    para especificar qual o número de argumento a tratar na conversão.
   
| Sinalizador | Descrição | 
|---|---|
| - | Justificar à esquerda dentro da largura de campo especificada; A justificação à direita é o padrão. | 
| + | Prefixa números positivos com um sinal de mais +; Por padrão, apenas números negativos
         são prefixados com um sinal negativo. | 
|  (espaço) | Preenche o resultado com espaços. Este é o padrão. | 
| 0 | Preenche números com zeros apenas à esquerda.
         Com os especificadores s, também pode
         preencher com zeros à direita. | 
| '(caractere) | Preenche o resultado com o caractere especificado. | 
    Um número inteiro que define em quantos caracteres (mínimo)
    esta conversão deve resultar, ou *.
    Se * for usado, a largura será fornecida
    como um valor inteiro adicional precedendo aquele formatado
    pelo especificador.
   
    Um ponto . opcionalmente seguido por
    um número inteiro ou *,
    cujo significado depende do especificador:
    
e, E,
       f e F:
       este é o número de dígitos a serem impressos
       após o ponto decimal (por padrão, é 6).
      
     g, G,
       h e H:
       este é o número máximo de dígitos
       significativos a serem impressos.
      
     s: atua como um ponto de corte,
       definindo um limite máximo de caracteres para a string.
      
     Nota: Se o ponto for especificado sem um valor explícito para precisão, 0 é assumido. Se
*for usado, a precisão é fornecida como um valor inteiro adicional precedendo aquele formatado pelo especificador.
| Especificador | Descrição | 
|---|---|
| % | Um caractere literal de porcentagem. Nenhum argumento é necessário. | 
| b | O argumento é tratado como um número inteiro e apresentado como um número binário. | 
| c | O argumento é tratado como um número inteiro e apresentado como o caractere com aquele código ASCII. | 
| d | O argumento é tratado como um número inteiro e apresentado como um número decimal (com sinal). | 
| e | O argumento é tratado como notação científica (por exemplo, 1.2e+2). | 
| E | Como o especificador e, mas usa
        letra maiúscula (por exemplo, 1.2E+2). | 
| f | O argumento é tratado como um float e apresentado como um número de ponto flutuante (com reconhecimento da localidade). | 
| F | O argumento é tratado como um float e apresentado como um número de ponto flutuante (sem reconhecimento da localidade). | 
| g | Formato geral. Deixa P igual à precisão se for diferente de zero, 6 se a precisão for omitida, ou 1 se a precisão for zero. Então, se uma conversão com estilo E tivesse um expoente de X: Se P > X ≥ −4, a conversão é com estilo f e precisão P − (X + 1). Caso contrário, a conversão é com estilo e e precisão P − 1. | 
| G | Como o especificador g, mas usaEef. | 
| h | Como o especificador g, mas usaF.
        Disponível a partir do PHP 8.0.0. | 
| H | Como o especificador g, mas usaEeF. Disponível a partir do PHP 8.0.0. | 
| o | O argumento é tratado como um número inteiro e apresentado como um número octal. | 
| s | O argumento é tratado e apresentado como uma string. | 
| u | O argumento é tratado como um número inteiro e apresentado como um número decimal sem sinal. | 
| x | O argumento é tratado como um número inteiro e apresentado como um número hexadecimal (com letras minúsculas). | 
| X | O argumento é tratado como um número inteiro e apresentado como um número hexadecimal (com letras maiúsculas). | 
    O especificador de tipo c ignora preenchimento e largura.
   
Tentar usar uma combinação dos especificadores de string e largura com conjuntos de caracteres que requerem mais de um byte por caractere pode resultar em resultados inesperados.
As variáveis serão forçadas a um tipo adequado para o especificador:
| Tipo | Especificadores | 
|---|---|
| string | s | 
| int | d,u,c,o,x,X,b | 
| float | e,E,f,F,g,G,h,H | 
values
Retorna o tamanho da string escrita.
   A partir do PHP 8.0.0, um erro ValueError será lançado se o número de argumentos for zero.
   Antes do PHP 8.0.0, um E_WARNING era emitido.
  
   A partir do PHP 8.0.0, um erro ValueError será lançado se [width] for menor que zero ou maior que PHP_INT_MAX.
   Antes do PHP 8.0.0, um E_WARNING era emitido.
  
   A partir do PHP 8.0.0, um erro ValueError será lançado se [precision] for menor que zero ou maior que PHP_INT_MAX.
   Antes do PHP 8.0.0, um E_WARNING era emitido.
  
   A partir do PHP 8.0.0, um erro ArgumentCountError será lançado quando menos argumentos do que o necessário forem fornecidos.
   Antes do PHP 8.0.0, false era retornado e um E_WARNING era emitido.
  
| Versão | Descrição | 
|---|---|
| 8.0.0 | Esta função não retorna mais falseem caso de falha. | 
| 8.0.0 | Lança um erro ValueError se o número de argumentos for zero;
       anteriormente, esta função emitia um E_WARNING. | 
| 8.0.0 | Lança um erro ValueError se [width]for menor que zero ou maior quePHP_INT_MAX;
       anteriormente, esta função emitia umE_WARNING. | 
| 8.0.0 | Lança um erro ValueError se [precision]for menor que zero ou maior quePHP_INT_MAX;
       anteriormente, esta função emitia umE_WARNING. | 
| 8.0.0 | Lança um erro ArgumentCountError quando menos argumentos do que o necessário são fornecidos;
       anteriormente, esta função emitia um E_WARNING. | 
Exemplo #1 fprintf(): inteiros com zero à esquerda
<?php
if (!($fp = fopen('date.txt', 'w'))) {
    return;
}
$year = 2005;
$month = 5;
$day = 6;
fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// escreverá a data em formato ISO no arquivo date.txt
?>Exemplo #2 fprintf(): formatando moeda
<?php
if (!($fp = fopen('currency.txt', 'w'))) {
    return;
}
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money irá mostrar "123.1";
$len = fprintf($fp, '%01.2f', $money);
// escreverá "123.10" em currency.txt
echo "foram escritos $len bytes em currency.txt";
// usa o valor de retorno de fprintf para determinar quantos bytes foram escritos
?>
If you use the command line interface (CLI SAPI), you may be interested by the 3 standard input/output streams (STDIN, STDOUT & STDERR) described at: https://www.php.net/manual/en/features.commandline.io-streams.php