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. Btw I did see that RFC, but I was under the impression that it was just an April Fool's prank. ;P --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 > >> >> > >> >> > >> > >> > >> >