473,396 Members | 1,917 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Chunked encoding with php+apache2

I'm trying to figure out how to enable chunked encoding with php over
apache2 for a particular page. My php/apache combination definitely
supports chunked encoding, because a page which calls only phpinfo()
uses it. On the other hand, pages without phpinfo() don't get sent with
chunked encoding (content-length is used instead). Does anyone know
how to specifically enable chunked encoding for a given page?
Thanks,
Jon

Jul 17 '05 #1
7 16776
on 02/02/2005 11:51 PM jo************@gmail.com said the following:
I'm trying to figure out how to enable chunked encoding with php over
apache2 for a particular page. My php/apache combination definitely
supports chunked encoding, because a page which calls only phpinfo()
uses it. On the other hand, pages without phpinfo() don't get sent with
chunked encoding (content-length is used instead). Does anyone know
how to specifically enable chunked encoding for a given page?


Why do you want to force chunked encoding on pages that are not
generated dynamically?

Chunked encoding is only useful when you do not know in advance the page
size.

--

Regards,
Manuel Lemos

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/

PHP Reviews - Reviews of PHP books and other products
http://www.phpclasses.org/reviews/

Metastorage - Data object relational mapping layer generator
http://www.meta-language.net/metastorage.html
Jul 17 '05 #2
> Why do you want to force chunked encoding on pages that are not
generated dynamically?

Chunked encoding is only useful when you do not know in advance the page size.


The pages *are* created dynamically -- they're written in php, not
plain html. The top part of the page is generated quickly, but the
last part of the page is not generated until after a lengthy operation,
which takes from 5-10 seconds. I need the top part of the page to
display quickly, and then display the last bit later, when it's finally
available. It seems to me that enabling chunked encoding, and flushing
the output at appropriate times is the best (only?) way to accomplish
this (without resorting to frames or complex Javascript). But extensive
Google and documentation searching has yielded nothing for me, so far,
as how to enable it.

Jul 17 '05 #3
jo************@gmail.com wrote:
The pages *are* created dynamically -- they're written in php [snip] But extensive Google and documentation searching has yielded nothing
for me, so far, as how to enable it.


But if a content-length header gets sent (like you suggest in the OP),
something (either php or apache) is buffering output.

Don't know of any ready made/easy way to turn on chunks. But you could
write an outputbuffer handler that does (but you'd still be at mercy of
Apaches buffering (and the client UAs buffering techniques)).

Jul 17 '05 #4
> Don't know of any ready made/easy way to turn on chunks. But you
could
write an outputbuffer handler that does (but you'd still be at mercy of Apaches buffering (and the client UAs buffering techniques)).


Thanks for the suggestion -- I actually tried that exact thing, but the
content-length was still being sent along, in addition to the chunked
encoding header that I manually added, via the header() function. If
there was a way to control exactly which headers are sent, (i.e.
suppress content-length from being sent) than this method would work,
but I don't know if that's possible.

Jul 17 '05 #5
>If there was a way to control exactly which headers are sent,
(i.e. suppress content-length from being sent) than this
method would work, but I don't know if that's possible.


....plus I'd need to find a way to disable buffering of the entire
output. There's more to it than just disabling headers, I should have
mentioned.

Jul 17 '05 #6
<jo************@gmail.com> wrote in message
news:11**********************@g14g2000cwa.googlegr oups.com...
I'm trying to figure out how to enable chunked encoding with php over
apache2 for a particular page. My php/apache combination definitely
supports chunked encoding, because a page which calls only phpinfo()
uses it. On the other hand, pages without phpinfo() don't get sent with
chunked encoding (content-length is used instead). Does anyone know
how to specifically enable chunked encoding for a given page?
Thanks,
Jon


Chunking doesn't happen if a content-length header is present. From the
source code:

if ((r->connection->keepalive != AP_CONN_CLOSE)
&& ((r->status == HTTP_NOT_MODIFIED)
|| (r->status == HTTP_NO_CONTENT)
|| r->header_only
|| apr_table_get(r->headers_out, "Content-Length")
|| ap_find_last_token(r->pool,
apr_table_get(r->headers_out,
"Transfer-Encoding"),
"chunked")
|| ((r->proto_num >= HTTP_VERSION(1,1))
&& (r->chunked = 1))) /* THIS CODE IS CORRECT, see above. */

The variable chunked would not get set if any of the previous conditions are
true. One of them being the presencce of a content-length header. Another,
which might make you scratch your head, is the presence of
"Thansfer-encoding: chunked".

The Apache 2 output filter will automatically add a content-length header if
it sees an end-of-stream marker AND nothing has been sent yet. From the
source code:

if (ctx->data_sent == 0 && eos) {
ap_set_content_length(r, r->bytes_sent);
}

If PHP passes any data down to Apache before it sends EOS, then chunking
happens. PHP uses a output buffer of 4096 bytes by default. Any page smaller
than that will not get chunked.
Jul 17 '05 #7
> Chunking doesn't happen if a content-length header is present.
From the source code:


Thanks very much for the help -- the apparent behavior makes a lot more
sense now.

Jul 17 '05 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: voigt Lander | last post by:
How come on the PHP site under the instructions for configuring PHP with Apache 2 http://ca2.php.net/install.apache2 it says , in somewhat stinted English... " Do not use Apache 2.0 and PHP...
27
by: Mxsmanic | last post by:
How can I combine SSI, CGI, and PHP in Apache 2.x? I keep reading that this can be done, but I haven't found any examples of the actual configuration required to do it. What I want to do is: ...
2
by: Mike | last post by:
I am sure that I am making a simple boneheaded mistake and I would appreciate your help in spotting in. I have just installed apache_2.0.53-win32-x86-no_ssl.exe php-5.0.3-Win32.zip...
3
by: kamlai | last post by:
I'm using PHP + apache2 in Linux platform. I found that the upload_max_filesize has only 2M. I want to increase this limit but I don't know where can I set it. I'm using Linux so I don't have...
3
by: Joseph S. | last post by:
Hi, I am trying to install PHP 5.0.4 on Apache 2.0.54 on WinXP Pro SP2 as a cgi binary. Apache2 directory is c:/Apache2 htdocs is c:/Apache2/htdocs php is installed in c:/php This contains...
1
by: Schraalhans Keukenmeester | last post by:
A plethora of articles on building PHP & Apache1 statically exist on the web. However I have not been able to find a similar document on a static compilation of PHP in an Apache2 executable. I...
1
by: paulsendave | last post by:
What a mix! Whilst I grep around for the first set of problems, I thought I'd ask any generous members of this PHP community for clues... I've started by trying out the instructions at:...
1
by: Kesavan | last post by:
I install apache2 in /usr/local/apache2 and install php5 by ./configure --with-apxs2=/usr/local/apache2/bin/ apxs PHP is successfully installed in my system. But now my .php files inside...
39
by: alex | last post by:
I've converted a latin1 database I have to utf8. The process has been: # mysqldump -u root -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset mydb mydb.sql # iconv -f...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.