Hi,

2012/4/10 Kris Craig <kris.cr...@gmail.com>:
>
>
> On Mon, Apr 9, 2012 at 7:02 PM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:
>>
>> 2012/4/10 Kris Craig <kris.cr...@gmail.com>:
>> > On Mon, Apr 9, 2012 at 6:15 PM, Luke Scott <l...@cywh.com> wrote:
>> >
>> >> On 4/9/12 5:02 PM, "Kris Craig" <kris.cr...@gmail.com> wrote:
>> >>
>> >> >On Mon, Apr 9, 2012 at 4:47 PM, Tom Boutell <t...@punkave.com> wrote:
>> >> >
>> >> >> Let me be very clear about that... I am NOT proposing that <?php at
>> >> >> the top be mandatory in a file loaded in code mode! I don't want to
>> >> >> type it ever again outside of a template file, personally. See the
>> >> >> title of the RFC.
>> >> >>
>> >> >
>> >> >But again, how then do you intend to make it so that a pure-code file
>> >> > can
>> >> >be called directly from the webserver on a host where the developer
>> >> >doesn't
>> >> >have access to most config options?  This is a very common scenario
>> >> > that
>> >> >cannot be ignored.  If not a <?phpp tag, then *something* in that file
>> >> > has
>> >> >to identify it as pure code otherwise this just isn't workable.
>> >> >
>> >> >Any INI option would be problematic because that would essentially
>> >> > cause
>> >> >all scripts relying on the setting you didn't choose to break.  And
>> >> >unfortunately, recognizing a new file extension could pose problems
>> >> > for
>> >> >people running on heavily restricted hosts that currently have PHP
>> >> > support
>> >> >"built-in".  While I would never host on one of those services myself,
>> >> > I
>> >> >don't like the idea of suddenly alienating everyone who does.
>> >> >
>> >> >I'd totally be open to an alternative to the <?phpp tag that can
>> >> > withstand
>> >> >scrutiny, but so far I haven't seen one.  And absent that, there's no
>> >> > way
>> >> >I
>> >> >could support this, which really sucks because at least conceptually I
>> >> >think it's a really good idea.
>> >>
>> >>
>> >> If the default is "template mode" and the "<?php" tag is optional (at
>> >> the
>> >> top) in "code" mode there shouldn't be any problems.
>> >>
>> >> We don't need to change or leave out the tag entirely.
>> >>
>> >> Is there a problem with people being able to choose "template mode" or
>> >> "code mode" as the default in the php.ini file if "template mode" is
>> >> the
>> >> default if not specified?
>> >>
>> >
>> > I think so, yes.  A config option that causes massive BC breakage
>> > doesn't
>> > become ok simply because it defaults to current behavior.  I just can't
>> > envision any situation in which having that option switched on would not
>> > cause problems, unless that server is *only* running scripts that assume
>> > code mode.  However, what if you want to use two scripts, but one
>> > assumes
>> > code and the other assumes HTML?  The ini_set() function would be pretty
>> > much useless given the circumstances.
>> >
>> > Instead, I would have an optional <?phpp tag at the top of the file.
>> >  This
>> > would be in addition to the file extension/SAPI approach and the require
>> > keyword approach.  In other words, perhaps an "all of the above"
>> > strategy
>> > is what's neeeded here.  But either way, I just don't think an INI
>> > setting
>> > would be feasible.
>>
>> Hi,
>>
>> I guess you are trying to fix other problem than me, but
>> please have a look this RFC
>>
>> https://wiki.php.net/rfc/nophptags
>>
>> INI setting is feasible for controlling template(embed) mode. It's easy to
>> understand what it does also.
>> PHP programmers may write
>>
>> ini_set('template_mode', 'off'); // in bootstrap. older PHP just ignores
>> this.
>>                                                  // Admin may put it
>> in php.ini or .htaccess also.
>>
>> then they would set template_mode="on"/"off" just before/afeter render
>> templates.
>>
>> ini_set('template_mode', on); // old PHP ignores
>> render_template($my_tpl, $my_tpl_vars); // do whatever is needed as
>> template engine
>> ini_set('template_mode', off); // old PHP ignores
>>
>> Above code works for both template_mode="on" and "off" in php.ini.
>>
>> In real world, programmer would write ini_set() inside of
>> render_template().
>> This simple change makes PHP free from fatal LFI mess while maintaining
>> compatibility with older PHP.
>>
>> If you don't want to write needless PHP tags, you don't have to with this
>> RFC, too.
>
>
> Yeah I get that.  I'm just not sure I see the point.  Aren't there already
> text editors that handle the <?php tag for you?  I'm just really nervous
> about creating an INI setting that would bork everything if there's a
> conflict between parallel running libraries and doesn't really provide any
> benefit other than an extremely minor convenience for some.  It's a slight
> convenience, but at the cost of creating a single INI setting that radically
> alters the way PHP scripts are executed.  What you're looking to do does
> have some merit, but it just doesn't pass the cost/benefit test for me.

I just would like to make PHP as safe as other languages (Ruby/Perl/Python/etc)
FLI problem is unique to PHP due to a embedded nature of PHP.

The php.ini setting do not affect much. If person who don't know what is does
set to template_mode=off, PHP just raises syntax errors for script expects
embedded mode.


> Btw I did see that RFC, but I was under the impression that it was just an
> April Fool's prank.  ;P

Yes, Morihoshi was made it for April Fool for a joke, but he was half
serious. And I'm really serious about this to make PHP safer :-)

Mandatory embedded mode is the last PHP weak point with respect to
other major scripting languages. IMHO.

Regards,

--
Yasuo Ohgaki
yohg...@ohgaki.net


>
> --Kris
>
>>
>> Regards,
>>
>> --
>> Yasuo Ohgaki
>> yohg...@ohgaki.net
>>
>>
>> >
>> > --Kris
>> >
>> >
>> >> Luke
>> >>
>> >>
>> >> >
>> >> >--Kris
>> >> >
>> >> >
>> >> >
>> >> >>
>> >> >> On Mon, Apr 9, 2012 at 7:06 PM, Luke Scott <l...@cywh.com> wrote:
>> >> >> > On 4/9/12 3:53 PM, "Tom Boutell" <t...@punkave.com> wrote:
>> >> >> >
>> >> >> >>I see why you want to allow <?php at the top to be optional in
>> >> >> >> 'code
>> >> >> >>mode,' rather than disallowed in code mode. But your purpose is to
>> >> >> >>allow legacy code to be autoloaded without knowing in advance
>> >> >> >> whether
>> >> >> >>it starts with <?php or not.
>> >> >> >>
>> >> >> >>But that would probably lead in practice to the use of a single
>> >> >> >> file
>> >> >> >>extension for old and new class files.
>> >> >> >>
>> >> >> >>And that, in turn, would lead to source code being spewed to the
>> >> >> >>browser for all to see if a perfectly respectable autoloader circa
>> >> >> >> PHP
>> >> >> >>5.3 runs into one of these new files.
>> >> >> >>
>> >> >> >>This is a much more significant security issue than some of those
>> >> >> >>mentioned previously because perfectly well-written code would
>> >> >> >> display
>> >> >> >>this behavior if someone unknowingly drops a newer library into,
>> >> >> >> say,
>> >> >> >>the lib/ folder of a Symfony 1.4 project. Ouch.
>> >> >> >
>> >> >> >
>> >> >> > So are you saying the starting "<?php" tag should be required in
>> >> >> > "code
>> >> >> > mode"?
>> >> >> >
>> >> >> > If so, I'm ok with that as long as:
>> >> >> >
>> >> >> > - "?>" is forbidden
>> >> >> >
>> >> >> > - Text before the opening <?php tag (literal text or white-spaces)
>> >> >> > is
>> >> >> > either ignored or throws an error instead of printing to the
>> >> >> > output
>> >> >> buffer.
>> >> >> >
>> >> >> > If that's not what you mean, please clarify.
>> >> >> >
>> >> >> > Luke
>> >> >> >
>> >> >> >>
>> >> >> >>It would be much better for that autoloader to just ignore the
>> >> >> >> file
>> >> >> >>because it has a new extension. This way the problem is
>> >> >> >> immediately
>> >> >> >>apparent:
>> >> >> >>
>> >> >> >>"Hey, my class didn't load, something must be up. Oh my PHP is old
>> >> >> >>and/or this autoloader doesn't know about .phpc files, what are
>> >> >> >> they
>> >> >> >>anyway... google google... aha, I need PHP 5.x and an updated
>> >> >> >>autoloader. Grumble. Okay."
>> >> >> >>
>> >> >> >>This is a much safer outcome.
>> >> >> >>
>> >> >> >>On Mon, Apr 9, 2012 at 6:34 PM, Luke Scott <l...@cywh.com> wrote:
>> >> >> >>> Tom,
>> >> >> >>>
>> >> >> >>> On 4/9/12 3:17 PM, "Tom Boutell" <t...@punkave.com> wrote:
>> >> >> >>>
>> >> >> >>>>My original goal was to stop typing <?php in pure code files.
>> >> >> >>>> That
>> >> >> >>>>includes at the top. I think it's entirely reasonable to achieve
>> >> >> >>>> it
>> >> >> >>>>with an option to the require keywords for this purpose and a
>> >> >> >>>> naming
>> >> >> >>>>convention to be followed by autoloaders. Keep in mind how
>> >> >> >>>> rarely
>> >> >>you
>> >> >> >>>>have to change them. We're talking about code maintained by a
>> >> >> >>>>relatively small number of very sharp developers. They can
>> >> >> >>>> handle a
>> >> >> >>>>few flags (:
>> >> >> >>>>
>> >> >> >>>>The prohibition of ?> still seems unnecessary and perhaps
>> >> >> >>>> divisive,
>> >> >> >>>>but if it were preferable to the majority to prohibit ?> in a
>> >> >> >>>> pure
>> >> >> >>>>code file, I could live with that as long as classic PHP files
>> >> >> >>>> are
>> >> >> >>>>also 100% supported and remain the default. I'm trying to craft
>> >> >> >>>> a
>> >> >> >>>>broadly acceptable compromise that still achieves the original
>> >> >> >>>> goal
>> >> >>of
>> >> >> >>>>allowing people to write "just code" in a class file.
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> I think you can you achieve that by making "template mode"
>> >> >> >>> default
>> >> >>and
>> >> >> >>>the
>> >> >> >>> default changeable in the php.ini file.
>> >> >> >>>
>> >> >> >>> Something like this:
>> >> >> >>>
>> >> >> >>> /*
>> >> >> >>>    Code only, <?php at top optional, no ?>.
>> >> >> >>>    Text before opening <?php silently dropped
>> >> >> >>>
>> >> >> >>> */
>> >> >> >>>
>> >> >> >>> require "/path/to/somefile.php", INCLUDE_CODE;
>> >> >> >>>
>> >> >> >>> /*
>> >> >> >>>    Works exactly as it is now: <?php and ?> allowed.
>> >> >> >>>    Text betweeen ?>...<?php printed to output buffer.
>> >> >> >>> */
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> require "/path/to/anotherfile.php", INCLUDE_TEMPLATE; // As it
>> >> >> >>> is
>> >> >>now
>> >> >> >>>
>> >> >> >>> /*
>> >> >> >>>    By default INCLUDE_TEMPLATE
>> >> >> >>>    Can change default mode in php.ini to be INCLUDE_CODE if
>> >> >> >>> desired.
>> >> >> >>> */
>> >> >> >>>
>> >> >> >>> require "/path/to/anotherfile.php"; // As it is now
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> Personally I would like to be able to do something like this in
>> >> >> >>> my
>> >> >>auto
>> >> >> >>> loader:
>> >> >> >>>
>> >> >> >>> include $file, INCLUDE_CODE & INCLUDE_SILENT;
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> That way I can ensure pure code is being inserted and no
>> >> >> >>> warnings
>> >> >>are
>> >> >> >>> thrown if the file doesn't exist (class undefined will be thrown
>> >> >> >>>anyway).
>> >> >> >>>
>> >> >> >>> I think it's important to make <?php optional at the top if
>> >> >> >>> you're
>> >> >> using
>> >> >> >>> existing or third party libraries that you can't modify. At
>> >> >> >>> least
>> >> >>then
>> >> >> >>> you'll be able to maintain backwards compatibility with most
>> >> >> >>> code
>> >> >> >>>written
>> >> >> >>> since PHP 5.
>> >> >> >>>
>> >> >> >>> (We don't need PHP_*. See the output of get_defined_constants()
>> >> >> >>> ).
>> >> >> >>>
>> >> >> >>> I like where this is going! Hopefully after the RFC has been
>> >> >>finalized
>> >> >> >>> everyone else will agree.
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>>
>> >> >> >>>>On Mon, Apr 9, 2012 at 6:06 PM, Kris Craig
>> >> >> >>>> <kris.cr...@gmail.com>
>> >> >> wrote:
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> Kris,
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>
>> >> >> >>>>>
>> >> >> >>>>>
>> >> >> >>>>> Bah, right!  That damned <?xml tag....
>> >> >> >>>>>
>> >> >> >>>>> I already know what everyone's reaction will be, and it is
>> >> >>probably a
>> >> >> >>>>>REALLY
>> >> >> >>>>> bad idea, but I feel obligated to at least mention it:  Should
>> >> >> >>>>> we
>> >> >> >>>>>consider
>> >> >> >>>>> replacing "<?..." with something that doesn't conflict with
>> >> >>anything,
>> >> >> >>>>> perhaps starting in PHP 6?  No need to get out the torches and
>> >> >> >>>>>pitchforks,
>> >> >> >>>>> everyone!  As insane and problematic as that would be (i.e. BC
>> >> >>break
>> >> >> >>>>>with
>> >> >> >>>>> roughly 1/3 of the internet lol), I felt as though the subject
>> >> >>should
>> >> >> >>>>>at
>> >> >> >>>>> least be broached.  ;P
>> >> >> >>>
>> >> >> >>>
>> >> >> >>> No need. Just keep it as <?php. It's already been well
>> >> >> >>> established.
>> >> >>We
>> >> >> >>> should ovoid overcomplicating it.
>> >> >> >>>
>> >> >> >>> Luke
>> >> >> >>>
>> >> >> >>>
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >>--
>> >> >> >>Tom Boutell
>> >> >> >>P'unk Avenue
>> >> >> >>215 755 1330
>> >> >> >>punkave.com
>> >> >> >>window.punkave.com
>> >> >> >>
>> >> >> >>--
>> >> >> >>PHP Internals - PHP Runtime Development Mailing List
>> >> >> >>To unsubscribe, visit: http://www.php.net/unsub.php
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Tom Boutell
>> >> >> P'unk Avenue
>> >> >> 215 755 1330
>> >> >> punkave.com
>> >> >> window.punkave.com
>> >> >>
>> >> >> --
>> >> >> PHP Internals - PHP Runtime Development Mailing List
>> >> >> To unsubscribe, visit: http://www.php.net/unsub.php
>> >> >>
>> >> >>
>> >>
>> >>
>> >>
>
>

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to