-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
[HttpFoundation] Fix deleteFileAfterSend on client abortion #42033
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Hey! I see that this is your first PR. That is great! Welcome! Symfony has a contribution guide which I suggest you to read. In short:
Review the GitHub status checks of your pull request and try to solve the reported issues. If some tests are failing, try to see if they are failing because of this change. When two Symfony core team members approve this change, it will be merged and you will become an official Symfony contributor! I am going to sit back now and wait for the reviews. Cheers! Carsonbot |
4a4c935
to
a579bbe
Compare
Thank you @nerg4l. |
…n (nerg4l) This PR was squashed before being merged into the 4.4 branch. Discussion ---------- [HttpFoundation] Fix deleteFileAfterSend on client abortion | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | Fix #27538 <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead --> | License | MIT | Doc PR | <!-- required for new features --> <!-- Replace this notice by a short README for your feature/bugfix. This will help people understand your PR and can be used as a start for the documentation. Additionally (see https://symfony.com/releases): - Always add tests and ensure they pass. - Never break backward compatibility (see https://symfony.com/bc). - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too.) - Features and deprecations must be submitted against branch 5.x. - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry --> **Description** If someone sets `deleteFileAfterSend` to `true` for a `BinaryFileResponse` instance they expect the file to be deleted when the response finished. This is not the case when the response is cancelled because PHP won't continue running the code. `ignore_user_abort` can be used to allow it to finish but this means `stream_copy_to_stream` will also continue to run regardless of the abort. To fix this later problem it can be a solution to run the copy in a loop and detect the connect abort manually with `connection_aborted`. **Tests** I don't know how can I simulate connection abort in PHPUnit. I would appreciate if I could get some guidance if it is possible. **Todo** - [ ] add tests if connection abort can be simulated - [ ] gather feedback for my changes Commits ------- f097bef [HttpFoundation] Fix deleteFileAfterSend on client abortion
deaff2c
to
f097bef
Compare
@fabpot I'm glad I was able help. Additional info: The chunk size in this PR is 8 KiB (8 * 1024 byte) at the moment which is the same as the default stream chunk size in PHP. As far as I know, the only way to read the default chunk size is to call |
Description
If someone sets
deleteFileAfterSend
totrue
for aBinaryFileResponse
instance they expect the file to be deleted when the response finished. This is not the case when the response is cancelled because PHP won't continue running the code.ignore_user_abort
can be used to allow it to finish but this meansstream_copy_to_stream
will also continue to run regardless of the abort. To fix this later problem it can be a solution to run the copy in a loop and detect the connect abort manually withconnection_aborted
.Tests
I don't know how can I simulate connection abort in PHPUnit. I would appreciate if I could get some guidance if it is possible.
Todo