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? 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