是否有可能PHP的標準輸出的數據過濾的流狀的方式:如何流式過濾PHP的標準輸出數據?
standard output ⟶ output filter ⟶ standard output
我已經意識到ob_start
。但我不想一次處理整個輸出,但是使用php_user_filter或類似的流式處理。
是否有可能PHP的標準輸出的數據過濾的流狀的方式:如何流式過濾PHP的標準輸出數據?
standard output ⟶ output filter ⟶ standard output
我已經意識到ob_start
。但我不想一次處理整個輸出,但是使用php_user_filter或類似的流式處理。
我不太明白這是什麼,但這是沒有理由不發表答案。
您可以使用ob_start()
回調並使其處理部分內容。所有你需要做的就是在初始化後立即設置ob_implicit_flush()
。現在通常的回調是一個簡單的輸出功能,但你可以把它複雜與期望:
class ob_callback {
function __invoke($part, $end_flag_0x04) {
return "+$part";
// or map to $stream->filter($in, $out, &$consumed, $closing)
}
function __destruct() { /* cleanup */ }
}
ob_start(new ob_callback, 2);
ob_implicit_flush(TRUE);
我不知道流-Y的使用將是什麼樣子。但我認爲沒有其他方法來攔截PHP標準輸出。請注意,隱式刷新在CLI上不起作用。
如果我正確理解你的問題,可以使用ob_start()
,$chunk_size
這個第二個參數。
ob_start('my_callback', 1024);
上面的例子將調用my_callback()
每次輸出將導致達到或超過一個千字節的緩衝區。如果您在單獨的報表中吐出數千字節,則會多次觸發my_callback()
。如果您輸出幾個千字節作爲單個字符串,這將不會有用,因爲每個輸出最多隻能觸發一次my_callback()
。
那麼你在想什麼是定義一個回調,修改什麼進入標準輸出?如果是,那麼該回調何時會被調用(多久)? – Jon
@Jon:調用次數可能取決於輸出塊的數量(例如'echo'參數,輸出行或某些內部緩衝區等)。或者它只被調用一次,並且在處理每個塊的準無限循環期間可以檢查流狀態。 – Gumbo