https://github.com/diversen/http-send-file
PHP lib which sends a file with support for (multiple) range requests and throttle.
https://github.com/diversen/http-send-file
http-send-file
Last synced: over 1 year ago
JSON representation
PHP lib which sends a file with support for (multiple) range requests and throttle.
- Host: GitHub
- URL: https://github.com/diversen/http-send-file
- Owner: diversen
- License: mit
- Created: 2015-03-02T16:09:38.000Z (over 11 years ago)
- Default Branch: main
- Last Pushed: 2024-03-03T14:40:52.000Z (over 2 years ago)
- Last Synced: 2025-04-09T19:18:55.995Z (over 1 year ago)
- Topics: http-send-file
- Language: PHP
- Size: 147 KB
- Stars: 56
- Watchers: 5
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# HTTP send file
Sends a file with support for (multiple) range requests.
It is able to throttle the download and adds an etag to the request.
It is quite small and simple.
# Install
With composer add to your "require" section:
composer require diversen/http-send-file
Usage example:
~~~php
use Diversen\Sendfile;
$s = new Sendfile();
// if you don't set type - we will try to guess it
$s->setContentType('application/epub+zip');
// if you don't set disposition (file name user agent will see)
// we will make a file name from file
$s->setContentDisposition('test.epub');
// Expires header. Default is a date in the past
$s->setExpires(3600);
// chunks of 40960 bytes per 0.1 secs
// if you don't set this then the values below are the defaults
// approx 40960 bytes per sec
$s->throttle(0.1, 40960);
// file
$file = '/some/dir/test.epub';
// send the file
try {
$s->send($file);
} catch (\Exception $e) {
echo $e->getMessage();
}
~~~
So you could just do like this:
~~~php
use Diversen\Sendfile;
$s = new Sendfile();
// file
$file = '/some/dir/test.epub';
// send the file
try {
$s->send($file);
} catch (\Exception $e) {
echo $e->getMessage();
}
// but check the headers if it is not
// working as expected as the guessing
// of content-type does not always work
// correctly.
~~~
Without sending content-disposition header:
~~~php
// without sending content-disposition header
// 2. param = false
try {
$s->send($file, false);
} catch (\Exception $e) {
echo $e->getMessage();
}
~~~
# Test notes
Build image:
docker build -t php-apache2 .
Run the docker image:
docker run -d -p 8080:80 -v $(pwd):/var/www/html --name test-send-file php-apache2
Enable autoloading:
composer install
Go to the browser at: http://localhost:8080/test
Or use curl, e.g.:
curl -v -L -O -C - http://localhost:8080/test/send_large_file.php
# Credits
Much of the code is taken (and rewritten) from here:
The process is nicely explained here:
MIT © [Dennis Iversen](https://github.com/diversen)