|
Posted by gosha bine on 06/26/07 08:52
On 25.06.2007 17:11 Julien Biezemans wrote:
> Hi!
>
> Here is another post concerning stream wrappers. I'm trying to implement
> a urn: scheme stream wrapper but this does not seem possible with PHP.
>
> Why? Because PHP analyzes URI with the following syntax:
>
> scheme "://" target
>
> Where _scheme_ is what they incorrectly call a "protocol" in the
> documentation and _target_ the actual target of the URI.
>
> When dealing with things like http://www..., ftp://ftp..., everything is ok.
>
> But how are we supposed to support things like mailto:user@domain.com,
> urn:xmpp:..., h323:host... and other schemes that are NOT followed by
> "://" but only ":"?
>
> If you try to register the mailto "protocol" (which is, again, not the
> correct term), you will do:
>
> stream_wrapper_register('mailto', 'MyMailToClass');
>
> But this wrapper class will not be used at all by PHP if you try this:
>
> fopen('mailto:user@domain.com', 'w');
>
> Instead you will have to write:
>
> fopen('mailto://user@domain.com', 'w');
>
> Which is wrong (see http://www.rfc-editor.org/rfc/rfc2368.txt).
>
>
> PHP consider that 'mailto:user@domain.com' falls into the default
> (file://) scheme as it does not find the "://" string after the
> so-called "protocol".
>
> We may intercept URI's not containing those "://" characters with a
> custom file:// stream wrapper. When the wrapper is called by PHP and the
> "path" starts with a recognized scheme like "mailto:", it may delegate
> the work to the actual mailto: wrapper. But this is just a workaround as
> it is supposed to handle resources on the local filesystem only.
>
>
> I understand that this behavior is probably caused by
> fopen('some:file.dat'); being mostly used to open a file that has a
> column character in its name and located in the current working
> directory (: character is not allowed in file names on windows, I
> guess). It simply demonstrates once again a problem that may arise with
> the default implicit file:// scheme in URI's.
>
> Anyway, I'm still posting to read your thoughts on this. Maybe someone
> will see another solution than the workaround I explained above.
>
> Thank you!
>
> Julien.
Well, I don't think 'fopen' arguments are urls or urns although
sometimes it may seem so. Just take it as php own format that only
accidentally matches some kinds of url.
On widnows, ':' is used to denote a drive, e.g.
fopen("C:\\WINDOWS\\blah") is perfectly valid.
--
gosha bine
extended php parser ~ http://code.google.com/p/pihipi
blok ~ http://www.tagarga.com/blok
Navigation:
[Reply to this message]
|