473,287 Members | 1,834 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,287 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 16769
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...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: Aftab Ahmad | last post by:
Hello Experts! I have written a code in MS Access for a cmd called "WhatsApp Message" to open WhatsApp using that very code but the problem is that it gives a popup message everytime I clicked on...
0
by: Aftab Ahmad | last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below. Dim IE As Object Set IE =...
0
by: marcoviolo | last post by:
Dear all, I would like to implement on my worksheet an vlookup dynamic , that consider a change of pivot excel via win32com, from an external excel (without open it) and save the new file into a...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...

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.