jstewmc/floor-execution-time

Floor a script's execution time

v2.0.0 2016-12-27 23:29 UTC

This package is auto-updated.

Last update: 2024-04-29 03:21:23 UTC


README

Floor a script's execution time.

This library will calculate a script's total execution time from $_SERVER['REQUEST_TIME_FLOAT'] to now in milliseconds.

If the total execution time is less than the floor, it will sleep for the difference:

namespace Jstewmc\FloorExecutionTime;

// instantiate the service with a 500 millisecond floor
$service = new FloorExecutionTime(500);

// ... something that takes 100 milliseconds

$service();  // sleeps for 400 milliseconds

If the execution time is greater than the floor, it will not sleep:

namespace Jstewmc\FloorExecutionTime;

// instantiate the service with a 500 millisecond floor
$service = new FloorExecutionTime(500);

// ... something that takes 1,000 milliseconds

$service();  // sleeps for 0 milliseconds

Flooring execution time helps defend against brute-force and timing attacks. Scripts which are likely to be brute-forced should be slow. Scripts which are likely to be timing attacked should have a constant execution time. Some scripts should be both.

Dependencies

This library depends on the REQUEST_TIME_FLOAT server variable. There is no guarantee that every web server will provide the REQUEST_TIME_FLOAT variable, however, most will. If the REQUEST_TIME_FLOAT server variable does not exist, this library will throw a RuntimeException on construction.

License

MIT

Author

Jack Clayton

Version

2.0.0, December 27, 2016

  • Rename Floor to FloorExecutionTime.
  • Update __construct() to throw exception if REQUEST_TIME_FLOAT server variable does not exist.
  • Remove $start argument of __invoke() method. It makes more sense to use REQUEST_START_TIME.

1.0.0, August 16, 2016

  • Major release
  • Update composer.json
  • Clean up comments

0.1.0, August 3, 2016

  • Initial release