On Jan 26, 2016 5:50 PM, "Julien Pauli" <jpa...@php.net> wrote:
>
> On Tue, Jan 26, 2016 at 5:15 AM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:
> > Hi Umberto,
> >
> > On Fri, Jan 22, 2016 at 9:49 PM, Umberto Salsi <sa...@icosaedro.it>
wrote:
> >> thank you very much for the reply, I now start understanding better
what
> >> happen and why currently i/o cannot be handled in user's space.
> >
> > You're welcome.
> > I think you have pointed out important missing parts in PHP.
> >
> >> Rather than an array of error, which might be quite expensive to
handle,
> >> why not a simple "char * lasterror" field added to the stream struct,
> >> normally set to NULL, where a description of the last error occurred
may
> >> be stored? The high-level functions, that is PHP fopen, fread, fwrite,
> >> fflush, fseek, fclose, may then check that string and, if set, trigger
> >> E_WARNING with a meaningful message after having reset that string back
> >> to NULL again. Many C libraries already provide such error strings,
> >> starting from the same C strerror().
> >
> > Pgsql's "notice" logging is implemented this way at first. Then I
changed
> > it to array of notices recently.  (Notice is raised during
> > transaction, for example)
> >
> > It's very difficult or impossible to detect where something wrong
happened
> > if there is only the last error. That's the reason why pgsql module is
changed
> > to have array of notices.
> >
> > The same would happen in streams, so it's better to store all errors
during
> > operation. Zend hash is extremely fast and good enough for logging
errors,
> > so we don't have to worry overheads.
> >
> >>
> >> The same should then be done with the filters, which currently only may
> >> return PSFS_ERR_FATAL, but might have their "char * lasterror" string
> >> too with the same purpose. Knowing the exact reason of the failure is
> >> essential to distinguish, for example, a dead disk drive or corrupted
file
> >> system, from a bare file mistakenly opened with the wrong decompressor
> >> or a file which was badly encoded.
> >
> > I agree.
> >
> >>
> >> Then all the specific stream and filter implementations can be adjusted
> >> to set that error string; for those still not fixed that string remains
> >> NULL and fopen, ferror, etc. will not report the error just as they do
> >> today, and will be fixed later step by step.
> >
> > Agree here, too.
> > Someone have to volunteer for this. It's not difficult for people on
this list.
> > I have too many backlogs for PHP project, so I hope someone volunteers
> > for this.
> >
> > Regards,
> >
> > --
> > Yasuo Ohgaki
> > yohg...@ohgaki.net
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>
> I think what we should do is sit around the table with people
> interested (Daniel Lowrey may be one of them), and plan a full rewrite
> of streams for PHP next major (PHP 8). I don't think addind stuff to
> next minors is a good idea, knowing we must prevent BC breaks in such
> versions. We'll probably have to introduce some BC breaks is our tidy.
>
> All our stream API is missing lots of features, and failing in many parts.
>
> We could as well add to the reflection Async I/O and scatter/gather,
> something I already thought about
> for PHP 7, but found no time nor motivation nor friend contributors to
> push to the level of quality we expect it for PHP.
>
> While beeing perfectly valid, fixing just one little problem among
> many others is not a durable solution for our stream API,
> which is old, patched everywhere, but pretty stable and serving its
> purpose as-is.
>
> There are lots of problems in extensions as well, regarding streams,
> where it is far from beeing easy to change one of the stream layer
> behavior, or implement your own.
> This should get addressed as well.

I totally agree with you here.

The same applies imho to the session (about the other rfc targetting 7.1 or
other).

Reply via email to