Reply to Re: [PHP] PHP Memory limit exceeded

Your name:

Reply:


Posted by Marek Kilimajer on 02/02/05 17:11

Ben-Nes Yonatan wrote:
> Hi all,
>
> I got a problem with uploading files which encounter the memory limit
> when their size is not even close to the memory limit itself, let me
> explain.
>
> My server is as follows:
> 1. PHP 4.3.9
> 2. DB - Postgresql 7.4
> 3. Apache 1.3.26
>
> Here is my code that i made for testing the problem (along the code i
> echoed the function memory_get_usage() to know how much memory was
> allocated already for the script):
>
> $imagefile = $_FILES['imagefile']; // recieve the file
> echo memory_get_usage().'<br />'; // 118592 memory bytes allocated
> $data = pg_escape_bytea(`cat $imagefile[tmp_name]`);
> echo memory_get_usage().'<br />'; // 5570280 memory bytes allocated
>
> $data = "INSERT INTO test_files (bin_data, filename, filesize, filetype)
> VALUES ('$data', '$imagefile[name]', '$imagefile[size]',
> '$imagefile[type]')"; // creating the sql for the insert, i called the
> received value also $data cause i dont want to keep the previous $data
> (after all we want to save our precious memory no? :))
> echo memory_get_usage().'<br />'; // 5570400 memory bytes allocated
> {changed from b4 only alittle}
>
> if ( !$res = pg_query ($this->conn, $data) ) // try to insert the sql
> string
> return 'error';
> else
> return 'gr8';
> echo memory_get_usage().'<br />'; // 5570648 memory bytes allocated
> {again changed only alittle}
>
>
> Now as far as i see the script needed about 5.5MB of memory to upload a
> file of 4.7MB but thats what so weird here... i receive the memory limit
> error even if the php.ini "memory_limit" is set to 16MB! {twice of the
> default of 8MB!} at 32MB it works fine... but thats way too much..
> I suspect that the problem is connected to the pg_query function itself
> but i didnt find what made it exactly...

Do you suspect or that's where the script output ends?

Even between 2nd and 3rd memory_get_usage() call your script's memory
usage increased rapidly - first the sql query was created, then it was
assigned to $data. So for a moment the file was in memory twice.

Something similar is with pg_query() - the file was at a moment in $data
string, then it is copied somewhere in the php_pg module and the memory
usage tripples.

As a solution you might want to implement (or look for implementation
of) mysql's load_file() function.

[Back to original 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

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