views:

1004

answers:

4

I have an image upload for a slideshow, and the users are continuously uploading files that are 2MB plus. Files under this size work fine, but files over the size cause what looks like a browser timeout.

Here are my php ini settings:

  • Max memory allocation: 12M
  • Max file upload size: 10M
  • Max HTTP Post size: 10M
  • Max execution time: 60
  • Max input parsing time: 120

These settings are in the configuration file itself, and I can change them directly. Changes show up when using phpinfo().

I am running on an apache server and php 4.3.9(client's choice, not mine). The apache server's request limit is set to default, which I believe is somewhere around 2GB?

When I use the firebug network monitor, it does look like I am not receiving a full response from the server, though I am not too experienced at using this tool. Things seem to be timing out at around 43 seconds.

All the help I can find on the net points to the above settings as the culprits, but all of those settings are much higher than this 2MB file and the 43 second time out.

Any suggestions at where I can go from here to solve this issue?

Here are relevant php ini settings from phpinfo(). Let me know if I need to post any more.

  • file_uploads On On
  • max_execution_time 60 60
  • max_input_nesting_level 64 64
  • max_input_time 120 120
  • memory_limit 12M 12M
  • post_max_size 10M 10M
  • safe_mode Off Off
  • upload_max_filesize 10M 10M
  • upload_tmp_dir no value no value
A: 

Where are those settings? If you're using .htaccess then your Apache configuration might not be allowing you to override those settings.

I'd suggest checking with a phpinfo() call if those settings are indeed being applied or not:

<?php
  phpinfo();
?>
Seb
I have the ability to edit the php ini file on this particular server, and they are showing up in php info. This is one of the reasons why this particular problem is really bothering me. I have no problem telling people to upload smaller files, but I have an interesting problem to solve now. ;)
Mesidin
Could you please post your PHP.ini settings? I mean, just those affecting files uploads.
Seb
Post has been updated!
Mesidin
Sorry pal, I just don't have any clue then :( Good luck!
Seb
Thanks for the help anyway! I appreciate the quick response. If I ever get this working, I will try to post the answer.
Mesidin
A: 

If it's a shared host, your host might have set a limit to override yours.

Otherwise, try making the POST limit higher than the file upload size. AFAIK, uploads are POSTED.

Macha
I just bumped the POST limit up to 11M, 1M over the file upload size. I am sending a small about of text data with the file, about 30 characters max. Nothing has changed unfortunately.
Mesidin
A: 

If the problem is due to the Host overriding your timeout, you can look for a host that still uses Apache 1: In Apache 1 the local .htaccess overrides the global setting even for the timeout.

Otherwise, there are dozens of Java applett uploaders available for just a few dollars (Google it). They split the file, upload the parts and put the parts back together transparently.

This is a guaranteed fix for timeout, and has the added advantage of letting users pause and resume their upload, see the progress, et all.

(Flash based uploaders don't have this advantage.)

SamGoody
+2  A: 

Make sure you have error reporting activated in php.ini: display_errors = On; this might give you a clue about what's going on. Production servers usually (should) have error reporting disabled.

I recently had a similar problem, and increasing the memory_limit setting worked for me. If you read files content into variables, each variable will take about as much memory as the file size, increasing the scripts memory requirements.

Ch4m3l3on
This what I exactly found. I decided to look at this area since upload settings all seemed fine. I played with bumping up the memory allocation, and it worked! I was definitely running down the wrong avenue. Even with display_errors = ON, it wasn't showing an error though.
Mesidin