Re: eval and HEREDOC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Wed, 21 Jul 2010 01:04:12 +0300, Sorin Buturugeanu <mail@xxxxxxx> wrote:
> Hello Vincent and thank you for your reply :).
> 
> That's true, I forgot to explain how I got to using HEREDOC, so ..
> 
> Using eval(file_get_contents($file)) just outputs the result on the
> spot and I need
> to get the whole output (without echoing it) and do some more things with
> it.
> 
> require_once() doesn't fit here (from what I can tell), because it
> would still just
> include the file in echo the output.
> 
> I think there must be a solution, but I'm missing something here  ..


Check out the ob_* functions

You could do this

ob_start();

include "/your/file.php";

$output = ob_get_clean();

echo $output;

Jim

> 
> Thanks again!
> 
> --
> Sorin Buturugeanu
> http://www.soin.ro
> 
> 
> On Wed, Jul 21, 2010 at 12:49 AM, Daevid Vincent <daevid@xxxxxxxxxx>
> wrote:
>>
>> > -----Original Message-----
>> > From: Sorin Buturugeanu [mailto:mail@xxxxxxx]
>> > Sent: Tuesday, July 20, 2010 2:11 PM
>> > To: php-general@xxxxxxxxxxxxx
>> > Subject:  eval and HEREDOC
>> >
>> > Hello,
>> >
>> > I am having trouble with a part of my templating script. I'll
>> > try to explain:
>> >
>> > The template itself is HTML with PHP code inside it, like:
>> >
>> > <div><?=strtoupper($user['name']);?></div>
>> >
>> > And I have the following code as part of the templating engine:
>> >
>> > $template = file_get_contents($file);
>> > $template = "return <<<TEMPLATE\n".$template."\nTEMPLATE;\n";
>> > $template = eval($template);
>> >
>> > The problem is that the eval() HEREDOC combination gives the
>> > following output:
>> >
>> > <?=strtoupper(Array['time']);?>
>> >
>> > If in the HTML file (template) I use
>> >
>> > <div><?=strtoupper({$user['name']});?></div>
>> >
>> > I get  <?=strtoupper(username);?> as an output.
>> >
>> > I have tried closing the php tag like this:
>> >
>> > $template = "return <<<TEMPLATE\n?>".$template."\nTEMPLATE;\n";
>> >
>> > but the extra ?> only gets outputed as HTML.
>> >
>> > This is my first post to this mailing list, so I great you
>> > all and thank you for any kind of solution to my problem.
>>
>> Why are you using HEREDOC to begin with? I personally find them to be
> ugly
>> and more trouble than they're worth.
>>
>> You can write the same thing as this I think (untested):
>>
>> $template = eval(file_get_contents($file));
>>
>> But you might also consider using "include_once" or "require_once"
> instead
>> of this "eval()" business.
>>
>> Also note, that a string can span more than one line and have variables
> in
>> it. It can even be used with code, so HEREDOC is again useless for most
>> situations:
>>
>> $foo = "
>> Hello $name,\n
>> \n
>> Today is ".date('Y-m-d')."\n
>> \n
>> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
>> \n
>> Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
>> metus, mattis a sollicitudin in, placerat vitae elit.
>> \n
>> Quisque elit mauris, varius sit amet cursus sed, eleifend a mauris.
>> ";
>>
> 
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux