Hi! On 10.01.2017 at 20:24, Andrea Faulds wrote:
> Christoph M. Becker wrote: > >> On 09.01.2017 at 21:19, Andrea Faulds wrote: >> >>> Would this opaque object still allow you to use an arbitrary stream of >>> your choice? >>> >>> Also, like with imagepng() etc., could you stream the output to uh… >>> PHP's default output stream? (I'm not sure what it's called. The thing >>> that `echo` goes to.) >> >> It would be possible to allow either a stream URL or a stream to given, >> what would fit to image(png|jpeg|…)(). However, these are "stand-alone" >> functions which close the stream when they're finished, while the >> animated GIF writing functions would *allow* the stream to be >> manipulated by the userland developer, even though I can't see practical >> reason to do so. >> >> And, of course, we could also let the functions accept NULL to directly >> write to stdout. Passing in 'php://stdout' should have the same effect. > > Alright. > >> >>> If it does both, I don't have much objection. >>> >>> Mind you… is it really necessary to hide the stream from the user? >>> fopen() is not particularly hard to use, and there are (admittedly >>> niche) cases where you might want to handle the stream yourself. >> >> Are there really such cases? Should we sacrifice the safety of internal >> stream handling to support some (hypothetical?) use cases? > > In fairness, I'm not sure. I know animated GIF streaming has been tried > before, though I doubt if it's actually used at all these days. A more > reasonable case might be embedding an animated GIF in other binary data. > But that's a hypothetical. Okay. > What is the actual “safety” gain of not using streams? That you don't > need to use fopen() yourself? (PHP will close files for you.) I'm just > not super convinced there's a need for adding this extra layer. It's not about having to fopen() the stream – in my opinion at least that's a non-brainer. What is a minor issue though, is that either imagegifanimend() closes the stream automatically (what imagepng() and friends are doing), or not (in my opinion the proper solution, but inconsistent). The major issue for me would be the possibility that the user fiddles with the stream between imagegifanimbegin() and imagegifanimend() – in the worst case closing the stream, so imagegifanimend() would fail or had to catch that. Of course, that would be a programmer error, but nonetheless it would have to be documented, and I'm pretty sure that at least some devs would walk into this trap. Anyhow, thanks for the feedback. I'll see how to unify this in a single RFC (probably with secondary voting options). -- Christoph M. Becker -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php