php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #42473 ob_start php://output and headers
Submitted: 2007-08-29 17:15 UTC Modified: 2008-11-26 01:21 UTC
Votes:4
Avg. Score:3.2 ± 1.5
Reproduced:3 of 4 (75.0%)
Same Version:1 (33.3%)
Same OS:2 (66.7%)
From: ce at netage dot bg Assigned:
Status: Closed Package: Apache2 related
PHP Version: 5.2.6 OS: *
Private report: No CVE-ID:
 [2007-08-29 17:15 UTC] ce at netage dot bg
Description:
------------
it is actually a duplicate problem with 40429, but since you have closed the bug I cannot reopen it, but it is still present with all versions including the new 5.2.4RC3
when open through a browser, not a cli!


Reproduce code:
---------------
<?php


ob_start();

$fp = fopen('php://output', 'w');
fwrite($fp, 'aaaaaaa');
fclose($fp);


$content = ob_get_clean();

header('Content-type: text/html');

echo $content;


Expected result:
----------------
aaaaaaa

Actual result:
--------------
Warning: Cannot modify header information - headers already sent in /var/www/test.php on line 13
aaaaaaa

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-08-30 09:54 UTC] ce at netage dot bg
from the documentation:

php://output allows you to write to the output buffer mechanism in the same way as print() and echo().

(taken from http://www.php.net/manual/en/wrappers.php.php)

so from the written the following code

<?php

ob_start();

echo 'aaaaaaa';

$content = ob_get_clean();

header('Content-type: text/html');

echo $content;

______________

should be equivalent to the problematic code, but it it not! this code with echo does not yeld the warning

either fix the documentation, either the bug
 [2007-08-30 11:32 UTC] jani@php.net
I don't know what your php.ini settings are but I can't even reproduce it..

 [2007-08-30 13:39 UTC] ce at netage dot bg
I just compile the latest version 5.2.4RC3

./configure --with-apxs2=/usr/bin/apxs2 --prefix=/usr/local/php-5.2.4

no php.ini, so everything is default

but I have discovered that if using CGI server api it is not reproducable

this is from phpinfo()

I can give some other info for my configuration if needed

Build Date 	Aug 30 2007 15:09:33 
Configure Command 	'./configure' '--with-apxs2=/usr/bin/apxs2' '--prefix=/usr/local/php-5.2.4' 
Server API 	Apache 2.0 Handler 
Virtual Directory Support 	disabled 
Configuration File (php.ini) Path 	/usr/local/php-5.2.4/lib 
Loaded Configuration File 	(none) 
PHP API 	20041225 
PHP Extension 	20060613 
Zend Extension 	220060519 
Debug Build 	no
 [2007-08-30 13:54 UTC] ce at netage dot bg
with windows and apache and again Server API -> Apache 2.0 Handler
it is reproducable, so I suppose the problem is something connected to the server api


here the CGI version in action - no problem

ce@ce:/usr/local/php-5.2.4/bin$ ./php-cgi
<?php
error_reporting(E_ALL);

ob_start();

$fp = fopen('php://output', 'w');
fwrite($fp, 'aaaaaaa');
fclose($fp);


$content = ob_get_clean();

header('X-z: 1');

echo $content;


X-Powered-By: PHP/5.2.4RC3
X-z: 1
Content-type: text/html

aaaaaaace@ce:/usr/local/php-5.2.4/bin$
 [2007-09-10 12:58 UTC] kouber@php.net
The bug is still present under Windows XP, PHP 5.2.4.

I'm using php.ini-recommended with display_errors = On.
 [2007-09-23 09:32 UTC] tzachi at zend dot com
The problem seems to be with fclose($fp) when $fp=php://output. fclose flushes headers and output in Apache handler(and filter, also it seems that in other SAPIs this situation will not occur), so headers are sent at this point. You can use this in order to partially fix:
<?php

ob_start();

$fp = fopen('php://output', 'w');
fwrite($fp, 'aaaaaaa');


$content = ob_get_clean();

header('Content-type: text/html');

echo $content;
fclose($fp);
 [2008-06-05 17:25 UTC] biggi at stefna dot is
I am getting this error as well. Using php-5.2.6 and Apache 2.0 handler.

I do not think the php://output stream should be affected by fclose since the stream really is not affected by fopen.

For information (example of a workaround): http://framework.zend.com/issues/browse/ZF-3396
 [2008-11-26 01:21 UTC] lbarnaud@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Fri Apr 18 05:03:21 2014 UTC