You are here: Re: Problem with ob_get_contents() « PHP « IT news, forums, messages
Re: Problem with ob_get_contents()

Posted by Skrol 29 on 04/10/05 08:27

Hi,

I've tested your code on PHP 4.3.3 and I have the same behavior has yours.

"Hello" is output at the end of the PhpInfo data, followed by a PHP notice :
Notice: ob_end_clean(): failed to delete buffer. No buffer to delete. in
....
And there is an empty "logfile" file created in the Apache directory insteaf
of the script's directory.

If you change in your script:
***********
register_shutdown_function("hello");
echo ("HELLO <br>");
die();
***********
by
***********
// register_shutdown_function("hello");
echo ("HELLO <br>");
hello()
die();
***********
then it runs as expected and the "logfile" file is created in the script's
directory.

It seems that when calling the shutdown function, all the buffered output is
immedialty sent to the client and the buffer mode is closed.
You maybe have PHP bug here, or the manual is wrong about the possibility to
retrieve the contents.
But we can notice that this also happens at the end of a script when there
is no shutdown function.

-------------------
Skrol29
www.tinybutstrong.com
-------------------

"Prathaban Mookiah" <prathap@ee.pdn.ac.lk> a écrit dans le message de news:
20050409115752.M4371@ee.pdn.ac.lk...
> Hello,
>
> I've posted a miniature version of my code here to explain my problem.
>
> <CODE>
>
> <?
> phpinfo();
>
> ob_start();
>
> register_shutdown_function("hello");
>
> echo ("HELLO");
>
> die();
>
> function hello()
> {
>
> $logfile = "logfile";
>
> $error_string = ob_get_contents();
>
> if(!$handle = fopen($logfile, "a"))
> {
> echo("Could not open logfile for writing!");
> ob_end_flush();
> exit;
> }
>
> if(fwrite($handle, $error_string) === FALSE)
> {
> echo("Could not write to logfile!");
> ob_end_flush();
> exit;
> }
>
> fclose($handle);
>
> ob_end_clean();
>
> }
>
> ?>
>
> </CODE>
>
> This simply does not work the way it should. i.e ob_get_contents doen't
> return
> any string and the buffer just gets flushed by itself at termination.
>
> Though the PHP manual says it is not possible to retrieve the contents of
> any
> output buffers using ob_get_contents() with PHP < 4.0.6. But I am using
> PHP 5.
> x.x
>
> Thanks in advance for any help.
>
> Prathap

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация