flysystem-offload/vendor/sabre/http/tests/www/connection_aborted.php

70 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
use Sabre\HTTP;
include '../bootstrap.php';
class DummyStream
{
private $position;
public function stream_open(string $path, string $mode, int $options, ?string &$opened_path): bool
{
$this->position = 0;
return true;
}
public function stream_read(int $count): string
{
$this->position += $count;
return random_bytes($count);
}
public function stream_tell(): int
{
return $this->position;
}
public function stream_eof(): bool
{
return $this->position > 25 * 1024 * 1024;
}
public function stream_close(): void
{
file_put_contents(sys_get_temp_dir().'/dummy_stream_read_counter', $this->position);
}
}
/*
* The DummyStream wrapper has two functions:
* - Provide dummy data.
* - Count how many bytes have been read.
*/
stream_wrapper_register('dummy', DummyStream::class);
/*
* Overwrite default connection handling.
* The default behaviour is however for your script to be aborted when the remote client disconnects.
*
* Nextcloud/ownCloud set ignore_user_abort(true) on purpose to work around
* some edge cases where the default behavior would end a script too early.
*
* https://github.com/owncloud/core/issues/22370
* https://github.com/owncloud/core/pull/26775
*/
ignore_user_abort(true);
$body = fopen('dummy://hello', 'r');
$response = new HTTP\Response();
$response->setStatus(200);
$response->addHeader('Content-Length', 25 * 1024 * 1024);
$response->setBody($body);
HTTP\Sapi::sendResponse($response);