Re: Copying 1000s files and showing the progress

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jochem Maas wrote:
Ritesh Nadhani schreef:
On Feb 13, 2008 6:03 PM, Richard Lynch <ceo@xxxxxxxxx> wrote:
On Wed, February 13, 2008 4:28 am, Ritesh Nadhani wrote:
I have a situation where I have to copy something like 1000 files one
by one to a temporary folder. Tar it using the system tar command and
let the user download the tar file.

Now while the copy is going on at server, I want to show some progress
to the user at client side. Most of the tutorial I found on net was
about showing progress while a file is being uploaded from client to
server. In this case the client has the info but for my case, the
client has no info.

A similar was problem was solved at
http://menno.b10m.net/blog/blosxom/perl/cgi-upload-hook.html but its
in PERL and uses some form of hook. I have no clue how to do it in
PHP.

Any clues or right direction would be awesome.
First of all, don't do that. :-)

Instead, set up a "job" system of what should be copied/tarred, and
then notify the user via email.

Don't make the user sit there waiting for the computer!

If you absolutely HAVE to do this due to a pointy-haired boss...

<?php
  $path = "/full/path/to/1000s/of/files";
  $dir = opendir($path) or die("Change that path");
  $tmp = tmpname(); //or whatever...
  while (($file = readdir($dir)) !== false){
    echo "$file<br />\n";
    copy("$path/$file", "/tmp/$tmp/$path");
  }
  exec("tar -cf /tmp/$tmp.tar /tmp/$tmp/", $output, $error);
  echo implode("<br />\n", $output);
  if ($error){
    //handle error here!
    die("OS Error: $error");
  }
?>

shameless plug:
//handle error here could perhaps use this:
http://l-i-e.com/perror.

--
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some indie artist.
http://cdbaby.com/from/lynch
Yeah, I get a buck. So?



I was actually doing what you just gave the code for. As of now, I was
doing something like:

""""
for file in files:
   copy from source to folder
   echo "Copying files encapsulated in ob_flush()"

tar the file which hardly takes time on the filessyetm but does take some time

Provide the link to the tar
"""

So at the client side it was like:

Copying file #1
Copying file #2
....
Download link

I though I could apply some funkiness to it by using some AJAX based
progress bar for which the example showed some sort of hooking and all
which I thought was too much for such a job. I will talk to my boss
regarding this and do the necessary.

BTW, whats the issue with AJAX based approach? Any particular reason
other then it seems to be a hack rather then an elegant solution
(which is more then enough reason not to implement it...but I wonder
if there is a technical reason to it too)?

the problem with the AJAX approach is the fact that there is absolutely
no reason for a user to sit staring at the screen. hit 'Go' get an
email when it's done, do something else in the mean time.

of course a PHB might demand functionality that gives him/her an excuse to
watch a progress bar ... in which case why not waste man hours making it a
funky web2.0 deal ... heck go the whole hog and use 'comet technique' to
push update info to the browser.



Can't see any problem with going down the ajax route myself (depending on how many concurrent users you expect) - A simple ajax style poll every second would suffice.

You could always use the fancily named yet really old "comet technique" aswell.. slap the script in a "magic" iframe and ob_flush whenever you have new data to send.

To be honeswt, both are trade-offs on a technology which isn't around yet. With ajax you've got to spawn a new thread for every request (say 1 per second, 100 concurrent users, that's 100 requests per second minimum on your server) OR with comet you've got 100 long lasting worker threads going.

If you do go comet, it's worth investigating mod event for apache 2.* http://httpd.apache.org/docs/2.2/mod/event.html

Nath

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux