mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-02 03:32:42 +01:00
c7dc59f9c4
Summary: Fixes T7620. I don't fully understand exactly what's going on here, but we don't actually need to call `flush()`. Test Plan: - Put timing code around the `echo`. - Made a fake page that emitted a lot of data. - Saw the `echo` block proportionate to data size under `curl --limit-rate ...`. - See T7620. - Downloaded a large file, got a reasonable progress bar and no obvious memory use issues. Reviewers: btrahan Reviewed By: btrahan Subscribers: jlarouche, rbalik, epriestley Maniphest Tasks: T7620 Differential Revision: https://secure.phabricator.com/D12127
36 lines
944 B
PHP
36 lines
944 B
PHP
<?php
|
|
|
|
/**
|
|
* Concrete HTTP sink which uses "echo" and "header()" to emit data.
|
|
*/
|
|
final class AphrontPHPHTTPSink extends AphrontHTTPSink {
|
|
|
|
protected function emitHTTPStatus($code, $message = '') {
|
|
if ($code != 200) {
|
|
$header = "HTTP/1.0 {$code}";
|
|
if (strlen($message)) {
|
|
$header .= " {$message}";
|
|
}
|
|
header($header);
|
|
}
|
|
}
|
|
|
|
protected function emitHeader($name, $value) {
|
|
header("{$name}: {$value}", $replace = false);
|
|
}
|
|
|
|
protected function emitData($data) {
|
|
echo $data;
|
|
|
|
// NOTE: We don't call flush() here because it breaks HTTPS under Apache.
|
|
// See T7620 for discussion. Even without an explicit flush, PHP appears to
|
|
// have reasonable behavior here: the echo will block if internal buffers
|
|
// are full, and data will be sent to the client once enough of it has
|
|
// been buffered.
|
|
}
|
|
|
|
protected function isWritable() {
|
|
return !connection_aborted();
|
|
}
|
|
|
|
}
|