Here at Zend we strive to find new ways to keep PHP developers sharp and on the leading edge of development bast practices. To that end, we have created our first “JumpStart” class, PHP7 JumpStart. A JumpStart class is different from our normal format. It is only one day and there are no interactive exercises. JumpStart classes are designed to help existing developers quickly come up to speed on a given topic. This post was extracted from our PHP7 JumpStart to show you what you can expect.
One of the RFCs included in PHP7 is “Continue output buffering despite aborted connection” contributed by Michael Wallner.
This RFC is to fix an issue introduced in PHP 5.4 during the re-write of the output buffering layer.
The problem is that if you set
ignore_user_abort=true, and the connection was aborted, the script would finish as designed. However, if you had an output buffer handler defined, it would be skipped. This not only affects userland code though, it also affects several built-in functions.
Again, it only affects them if
ignore_user_abort is set to true and the connection is aborted.
The solution in this case is simple, make it work the way it was supposed to and the way it had up until 5.4. In PHP 7, if you have a callback defined for output buffering, and you have
ignore_user_abort=true then upon an abort, the script will finish and the output will be handed to the callback. The results will still be discarded as the connection has been aborted, but if you are doing processing inside of the callback, it will still happen.
In this simple example, we use output buffering to process a series of numbers and output FizzBuzz. If the connection is aborted during the loop in PHP 5.4-5.5,
make_fizzBuzz would never be called. In this case, since we calculate each run on the fly, the results would not be bad. However, if after calculating FizzBuzz, we stored the results in a file, and read that file in if it existed next time before even hitting the for loop, the results would be incomplete.
Since behavior is changing from 5.4-5.5. there is a very slight chance for a BC break. If your code actually depends on this behavior, it will break. However, since this was introduced in 5.4 and the result is incomplete processing, chances are good that most developers have not built code depending on this behavior.
Join us for PHP7 Jump Start
Want to learn more? Join us for PHP7 JumpStart. In a single day we will cover every new function and feature that is scheduled for inclusion in PHP7.
Get a jump start on PHP7.