You are here: Re: Intense CPU strain....suggestions « PHP Programming Language « IT news, forums, messages
Re: Intense CPU strain....suggestions

Posted by Jerry Stuckle on 05/31/07 15:40

cbmeeks wrote:
>> Well, you could kick off a batch job to do your resizing, then return to
>> the user. That way it can keep processing the images. The only thing
>> you'll have to handle is when the user wants to display his gallery
>> before it's ready.
>
>
> That's exactly how I want to do it. I just don't know the best way to
> execute it. I like the idea of having an XML-RPC server running but I
> am concerned with security (as I should be).
>
> So, let's say I have the following code (using CI):
>
> ...
> $this->Upload->do_uploads(); // handle the actual uploading.
>
> $this->Photos->do_resizing(); // handle the resizing
>
> redirect('waiting');
> ....
>
> "Waiting" doesn't get kicked off until after do_resizing (sorry, new
> to PHP). I'm sure there is a smarter way. I'd like to avoid pop-ups,
> iframes, javascript, etc if possible.
>
> I also thought about having the "do_resizing" simple add some records
> to a db and have a program running on the server full time that checks
> the db frequently. But wouldn't that be wasteful? I like the idea of
> programs laying dormant until something kicks it in the pants and says
> "do something!" lol
>
> Thanks
>
> cbmeeks
> http://www.signaldev.com
>
>
>
>

First of all, the redirect won't happen until the code reaches there -
which is after your resizing. So that's normal operation.

You could have a cron job kicked off every few minutes to resize the
pictures, but again, you'll run into the problem that after uploading
the user won't be able to see the pictures he's just uploaded - at least
in various sizes.

You could use shell_exec() to start off a background process, i.e.
(assuming Unix/Linux):

shell_exec('nohup myprog file1 file2 file3 2> /dev/null &');

nohup says to execute a command without hangups and no output, 2>
/dev/null throws away any error messages, and the '&' at the end says
run in the background.

You'll still run into a problem that the resizing might not occur as
fast as the user wants to display it; you'll have to be able to handle
this in your display routines.

Alternatively, you could do something like:

<body>
echo 'Resizing your images, please wait...<br>';
flush();
$this->Upload->do_uploads(); // handle the actual uploading.
$this->Photos->do_resizing(); // handle the resizing
echo 'Done!. <a href="nextpage.php">Click here to continue</a>';
</body>

The flush() works with most browsers if you keep the html simple - it
forces the output to the browser and the browser displays it. But if
you start to get fancy (i.e. tables, etc.), many browsers will wait for
the end of the element to actually display.

The only problem with this is, once you've sent *any* output to the
browser, you can't redirect them to another page via php (you could use
an html redirect). That's why the link.

Just some ideas.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

 

Navigation:

[Reply to this 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

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