Just use your own little script for this kind of thing; it doesn't
belong in the core of the language.

--Wez.

On Thu, 29 May 2003, George Whiffen wrote:

> Apologies in advance if internals is not for feature requests.
>
>
> include() and require() pick up the whole file.  Could we have the
> option to include just part of the file?
>
>
> Proposed new syntax for include(), require():
>
> include ( string filename [, string start_tag [, string end_tag]])
>
> If the optional start_tag is specified, the file is only read from
> immediately after the first occurrence of the start_tag string in the
> file.  If the optional end_tag is also specified, reading of the file
> stops with the last character before the end_tag.
>
> Example:
>
> include('layout.html',"<!-- section header -->\n","\n<!-- section");
>
> with layout.html as follows:
>
>   <!-- section header -->
>   <html>
>   <head>
>   </head>
>   <body>
>   <img src="banner.gif">
>   <h1> Some standard title</h1>
>   <table width="700">
>   <tr>
>   <td>
>   <!-- section middle -->
>   Some php output
>   <!-- section footer -->
>   </td>
>   </tr>
>   </table>
>   <h2>Complaints to <A HREF="<?= $email?>" me</A><h2>
>   </body>
>   </html>
>
> would include only the header section, i.e.:
>
>   <html>
>   <head>
>   </head>
>   <body>
>   <img src="banner.gif">
>   <h1> Some standard title</h1>
>   <table width="700">
>   <tr>
>   <td>
>
> Purpose:
> At least for me, it is very common for at least the header and footer of
> every page to be prepared and maintained by an html developer as part of
> a "standard" layout.  Individual php generated html pages "include" the
> header, then write their own output and finally "include" the footer.
>
> With the current include()/require(), the header and footer MUST be
> stored in individual files.  They have to be "cut out" of the standard
> layout design page and stored in separate files e.g. header.txt and
> footer.txt.  From then on, the html developer has to maintain them
> individually without the benefit of viewing them together in the layout
> page via their html editor.
>
> With partial includes available, the layout page could be used directly
> to provide the header, footer, navigation and any other standard
> includes while still being easily maintainable and viewable as a whole
> by non-php html developers using standard html editors.
>
> I believe this is a common scenario where partial includes would save
> time and significantly improve maintainability.  There are plenty of
> other possible uses.  It could just as well be mail text, xml, or plain
> old php code that you might prefer to handle in sections of one file
> rather than being forced into placing each section in a separate include
> files.
>
> Implementation:
> With the proposed syntax, implementation shouldn't be too bad.  It's
> really just an extra couple of string scans i.e. the php equivalent
> would be something like:
>
> $code = get_file_contents($filename);
> $startpos = strpos($code,$start_tag);
> if ($startpos)
> {
>     $startpos = $startpos + strlen($start_tag);
>     $endpos = strpos($code,$end_tag,$startpos);
>     if ($endpos)
>     {
>        $code = substr($code,$startpos,$endpos - $startpos);
>     } else {
>        $code = substr($code,$startpos);
>     }
> }
> eval('?>'.$code.'<?');
>
> There is no need for regex or tokenizing, and it's the user's
> responsibility to decide if they want to keep or lose trailing/starting
> new lines, enclosing comment tags etc.
>
> The trickiest question is where/when to do the scans to pick out the
> appropriate section of the file.  The most obvious candidate is probably
> Zend/zend_language_scanner.c:zend_read_file(). This seems to be where an
> include file is actually read.  Unfortunately it's pretty deep into the
> code and I don't suppose anyone would want to change it without at least
> having Zeev/Andi/Whoever's go-ahead.
>
> As to performance, my guess is it would be significantly faster than an
> include of two separate files: after the first include there's a
> fighting chance of finding the include file still in O/S file/disk cache
> for second and subsequent accesses.
>
>
> What do you all think?
>
> George.
>
>
> --
> 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