Quero alterar o tamanho do buffer para E/S de arquivo durante a leitura/gravação em arquivos do PHP, mas a única maneira de fazer isso é stream_set_write_buffer()
sempre retornando -1. Não consegui encontrar nenhuma descrição de erro com error_reporting(E_ALL);
ou algo assim.
Tenho um exemplo ao vivo que reproduz o problema: https://onlinephp.io/c/5955f
Estou pedindo ajuda, por que ele falha? Como fazer funcionar e o que estou esquecendo? Nenhum médico me ajudou até agora.
Aqui está uma solução alternativa:
Por que falha?
stream_set_write_buffer
define o buffer através desetvbuf
Mas
fopen
a função do PHP não chamafopen
a função do C, mas sim aopen
chamada do sistema, que retorna um descritor de arquivo, então estefile
campo é nulo:Então pesquisei neste arquivo e encontrei uma função chamada
php_stdiop_cast
que define ofile
campo:E essa função é chamada por outra função chamada
php_stdiop_sync
, que é a implementação das funçõesfsync
e .fdatasync
Com base no seu ambiente sandbox/online :
Por que
stream_set_write_buffer()
pode falharTipos de fluxo e seu suporte
php://output
php://stdout