[PHP] Redirect output to a file on the web server

2010-12-06 Thread Ferdi
Greetings List members,

I have a script that takes quite a while to run, one or two hours, I wish to
redirect the normal php output to a file on the webserver itself. I don't
mind if in the process, the browser displays a blank page. The reason I want
to do this is that if the script crashes or the browser Is closed by
mistake, I have absolutely no record of where the script stopped running.

I could use code like below
At the beginning of the script:
ob_start();

At the end of the script:
$page = ob_get_contents();
ob_end_flush();
$fp = fopen(output.html,w);
fwrite($fp,$page);
fclose($fp);

However, I see some problems with this:
I'm not too sure of the size of the output. It may balloon to over the
buffering limit (in PHP? Apache?) and then what happens?
Secondly, if the script crashes before the end, I won't get any output.
Finally, I am using a library in the script that outputs status and error
messages of its own. So, if I manually opened a file and used fwrite()
alongside echo for my messages, I would lose out on those messages.

Anybody has any pointers on how you could send the output not only to a
browser, but also to a file on the webserver? If not, at least to a file?

Thanks and regards,
Ferdi


Re: [PHP] Redirect output to a file on the web server

2010-12-06 Thread Steve Staples
On Mon, 2010-12-06 at 20:29 +0530, Ferdi wrote:
 Greetings List members,
 
 I have a script that takes quite a while to run, one or two hours, I wish to
 redirect the normal php output to a file on the webserver itself. I don't
 mind if in the process, the browser displays a blank page. The reason I want
 to do this is that if the script crashes or the browser Is closed by
 mistake, I have absolutely no record of where the script stopped running.
 
 I could use code like below
 At the beginning of the script:
 ob_start();
 
 At the end of the script:
 $page = ob_get_contents();
 ob_end_flush();
 $fp = fopen(output.html,w);
 fwrite($fp,$page);
 fclose($fp);
 
 However, I see some problems with this:
 I'm not too sure of the size of the output. It may balloon to over the
 buffering limit (in PHP? Apache?) and then what happens?
 Secondly, if the script crashes before the end, I won't get any output.
 Finally, I am using a library in the script that outputs status and error
 messages of its own. So, if I manually opened a file and used fwrite()
 alongside echo for my messages, I would lose out on those messages.
 
 Anybody has any pointers on how you could send the output not only to a
 browser, but also to a file on the webserver? If not, at least to a file?
 
 Thanks and regards,
 Ferdi

Just curious, but if it takes that long to run, why are you running it
from a browser?  why not run it from the commandline, that way you dont
have to change your php.ini for the webserver (increasing the timeout,
memory limits, etc etc... you can change those for the CLI only?

2 hours is a long time to hope that the browser doesn't close, or
connectivity doesn't get interupted for even 1 microsecond...

if the script has breaks in it, where it starts to do something else,
you can put in an email to yourself, to say hey, we're HERE now

but i would look into running it from the CLI over the webserver, you
would be less likely to run into issues on something that takes that
amount of time to run.   

If you needed the output to be displayed on a webpage, you can write the
progress to a file, and then have a php webpage that reads the file, and
using ajax or whatever, refresh the content.

good luck in your script, and if you still run it from the browser, and
need to output to a file, then i would continually be writing content to
that file, every time you do soemthing, or start another part of the
script so you know EXACTLY where you are, at all times... 

Steve



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



Re: [PHP] Redirect output to a file on the web server

2010-12-06 Thread Ferdi
On 6 December 2010 20:47, Steve Staples sstap...@mnsi.net wrote:

 On Mon, 2010-12-06 at 20:29 +0530, Ferdi wrote:
  Greetings List members,
 
  I have a script that takes quite a while to run, one or two hours, I wish
 to
  redirect the normal php output to a file on the webserver itself. I don't
  mind if in the process, the browser displays a blank page. The reason I
 want
  to do this is that if the script crashes or the browser Is closed by
  mistake, I have absolutely no record of where the script stopped running.
 
  I could use code like below
  At the beginning of the script:
  ob_start();
 
  At the end of the script:
  $page = ob_get_contents();
  ob_end_flush();
  $fp = fopen(output.html,w);
  fwrite($fp,$page);
  fclose($fp);
 
  However, I see some problems with this:
  I'm not too sure of the size of the output. It may balloon to over the
  buffering limit (in PHP? Apache?) and then what happens?
  Secondly, if the script crashes before the end, I won't get any output.
  Finally, I am using a library in the script that outputs status and error
  messages of its own. So, if I manually opened a file and used fwrite()
  alongside echo for my messages, I would lose out on those messages.
 
  Anybody has any pointers on how you could send the output not only to a
  browser, but also to a file on the webserver? If not, at least to a file?
 
  Thanks and regards,
  Ferdi

 Just curious, but if it takes that long to run, why are you running it
 from a browser?  why not run it from the commandline, that way you dont
 have to change your php.ini for the webserver (increasing the timeout,
 memory limits, etc etc... you can change those for the CLI only?

 2 hours is a long time to hope that the browser doesn't close, or
 connectivity doesn't get interupted for even 1 microsecond...

 if the script has breaks in it, where it starts to do something else,
 you can put in an email to yourself, to say hey, we're HERE now

 but i would look into running it from the CLI over the webserver, you
 would be less likely to run into issues on something that takes that
 amount of time to run.

 If you needed the output to be displayed on a webpage, you can write the
 progress to a file, and then have a php webpage that reads the file, and
 using ajax or whatever, refresh the content.

 good luck in your script, and if you still run it from the browser, and
 need to output to a file, then i would continually be writing content to
 that file, every time you do soemthing, or start another part of the
 script so you know EXACTLY where you are, at all times...

 Steve


Hi Steve,

Thanks for the tips. To answer your queries, I don't mind using CLI. How do
I then ensure the messages, error or otherwise, output by the library I use,
show up in the file I'm outputting to? Please note that I only make calls to
the functions and object methods from this library and error or success
messages are probably echo'd by the code from the library.

I believe some context is in order. I am actually sending an email to a
large number of our customers (around 10,000), each with the customer's
name.

My script does output a simple success or failure message. The library
outputs more technical info. All I would like to know is which email got
sent and which one failed. As you point out, I could write the success /
failure messages to a file, but, I would also like to capture the messages
output by the library.

Thanks and regards,
Ferdi


Re: [PHP] Redirect output to a file on the web server

2010-12-06 Thread Richard Quadling
On 6 December 2010 15:46, Ferdi ferdinan...@printo.in wrote:
 On 6 December 2010 20:47, Steve Staples sstap...@mnsi.net wrote:

 On Mon, 2010-12-06 at 20:29 +0530, Ferdi wrote:
  Greetings List members,
 
  I have a script that takes quite a while to run, one or two hours, I wish
 to
  redirect the normal php output to a file on the webserver itself. I don't
  mind if in the process, the browser displays a blank page. The reason I
 want
  to do this is that if the script crashes or the browser Is closed by
  mistake, I have absolutely no record of where the script stopped running.
 
  I could use code like below
  At the beginning of the script:
  ob_start();
 
  At the end of the script:
  $page = ob_get_contents();
  ob_end_flush();
  $fp = fopen(output.html,w);
  fwrite($fp,$page);
  fclose($fp);
 
  However, I see some problems with this:
  I'm not too sure of the size of the output. It may balloon to over the
  buffering limit (in PHP? Apache?) and then what happens?
  Secondly, if the script crashes before the end, I won't get any output.
  Finally, I am using a library in the script that outputs status and error
  messages of its own. So, if I manually opened a file and used fwrite()
  alongside echo for my messages, I would lose out on those messages.
 
  Anybody has any pointers on how you could send the output not only to a
  browser, but also to a file on the webserver? If not, at least to a file?
 
  Thanks and regards,
  Ferdi

 Just curious, but if it takes that long to run, why are you running it
 from a browser?  why not run it from the commandline, that way you dont
 have to change your php.ini for the webserver (increasing the timeout,
 memory limits, etc etc... you can change those for the CLI only?

 2 hours is a long time to hope that the browser doesn't close, or
 connectivity doesn't get interupted for even 1 microsecond...

 if the script has breaks in it, where it starts to do something else,
 you can put in an email to yourself, to say hey, we're HERE now

 but i would look into running it from the CLI over the webserver, you
 would be less likely to run into issues on something that takes that
 amount of time to run.

 If you needed the output to be displayed on a webpage, you can write the
 progress to a file, and then have a php webpage that reads the file, and
 using ajax or whatever, refresh the content.

 good luck in your script, and if you still run it from the browser, and
 need to output to a file, then i would continually be writing content to
 that file, every time you do soemthing, or start another part of the
 script so you know EXACTLY where you are, at all times...

 Steve


 Hi Steve,

 Thanks for the tips. To answer your queries, I don't mind using CLI. How do
 I then ensure the messages, error or otherwise, output by the library I use,
 show up in the file I'm outputting to? Please note that I only make calls to
 the functions and object methods from this library and error or success
 messages are probably echo'd by the code from the library.

 I believe some context is in order. I am actually sending an email to a
 large number of our customers (around 10,000), each with the customer's
 name.

 My script does output a simple success or failure message. The library
 outputs more technical info. All I would like to know is which email got
 sent and which one failed. As you point out, I could write the success /
 failure messages to a file, but, I would also like to capture the messages
 output by the library.

 Thanks and regards,
 Ferdi


I would log the success/failure with the data (assuming it is coming from a DB).

If not, you could use a simple file_put_contents($filename, date('r')
. $text . PHP_EOL, FILE_APPEND);

That would append 1 line of text at a time to the file. Using tail on
that file would show you the last work done (and when it was done).


-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

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



Re: [PHP] Redirect output to a file on the web server

2010-12-06 Thread Steve Staples
On Mon, 2010-12-06 at 16:19 +, Richard Quadling wrote:
 On 6 December 2010 15:46, Ferdi ferdinan...@printo.in wrote:
  On 6 December 2010 20:47, Steve Staples sstap...@mnsi.net wrote:
 
  On Mon, 2010-12-06 at 20:29 +0530, Ferdi wrote:
   Greetings List members,
  
   I have a script that takes quite a while to run, one or two hours, I wish
  to
   redirect the normal php output to a file on the webserver itself. I don't
   mind if in the process, the browser displays a blank page. The reason I
  want
   to do this is that if the script crashes or the browser Is closed by
   mistake, I have absolutely no record of where the script stopped running.
  
   I could use code like below
   At the beginning of the script:
   ob_start();
  
   At the end of the script:
   $page = ob_get_contents();
   ob_end_flush();
   $fp = fopen(output.html,w);
   fwrite($fp,$page);
   fclose($fp);
  
   However, I see some problems with this:
   I'm not too sure of the size of the output. It may balloon to over the
   buffering limit (in PHP? Apache?) and then what happens?
   Secondly, if the script crashes before the end, I won't get any output.
   Finally, I am using a library in the script that outputs status and error
   messages of its own. So, if I manually opened a file and used fwrite()
   alongside echo for my messages, I would lose out on those messages.
  
   Anybody has any pointers on how you could send the output not only to a
   browser, but also to a file on the webserver? If not, at least to a file?
  
   Thanks and regards,
   Ferdi
 
  Just curious, but if it takes that long to run, why are you running it
  from a browser?  why not run it from the commandline, that way you dont
  have to change your php.ini for the webserver (increasing the timeout,
  memory limits, etc etc... you can change those for the CLI only?
 
  2 hours is a long time to hope that the browser doesn't close, or
  connectivity doesn't get interupted for even 1 microsecond...
 
  if the script has breaks in it, where it starts to do something else,
  you can put in an email to yourself, to say hey, we're HERE now
 
  but i would look into running it from the CLI over the webserver, you
  would be less likely to run into issues on something that takes that
  amount of time to run.
 
  If you needed the output to be displayed on a webpage, you can write the
  progress to a file, and then have a php webpage that reads the file, and
  using ajax or whatever, refresh the content.
 
  good luck in your script, and if you still run it from the browser, and
  need to output to a file, then i would continually be writing content to
  that file, every time you do soemthing, or start another part of the
  script so you know EXACTLY where you are, at all times...
 
  Steve
 
 
  Hi Steve,
 
  Thanks for the tips. To answer your queries, I don't mind using CLI. How do
  I then ensure the messages, error or otherwise, output by the library I use,
  show up in the file I'm outputting to? Please note that I only make calls to
  the functions and object methods from this library and error or success
  messages are probably echo'd by the code from the library.
 
  I believe some context is in order. I am actually sending an email to a
  large number of our customers (around 10,000), each with the customer's
  name.
 
  My script does output a simple success or failure message. The library
  outputs more technical info. All I would like to know is which email got
  sent and which one failed. As you point out, I could write the success /
  failure messages to a file, but, I would also like to capture the messages
  output by the library.
 
  Thanks and regards,
  Ferdi
 
 
 I would log the success/failure with the data (assuming it is coming from a 
 DB).
 
 If not, you could use a simple file_put_contents($filename, date('r')
 . $text . PHP_EOL, FILE_APPEND);
 
 That would append 1 line of text at a time to the file. Using tail on
 that file would show you the last work done (and when it was done).
 
 
 -- 
 Richard Quadling
 Twitter : EE : Zend
 @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
 

if you're using a linux based server, you could log (like Richard said)
each success / failure to the file, or each to its own success / failure
file, and then if you want to watch the, you could just do a tail -f of
the file, to see what is it doing (sometimes having it scroll is pretty
handy i find)... 

it wouldn't be hard to write a web-based 'tail -f' page, so you can
track the progress from anywhere you wanted :)




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



Re[2]: [PHP] Redirect output to a file on the web server

2010-12-06 Thread Andre Polykanine
Hello Steve,

Btw, the built-in mail() function is to slow to send such amount
of mail. Consider using SMTP (if you don't).
-- 
With best regards from Ukraine,
Andre
Skype: Francophile
Twitter: http://twitter.com/m_elensule
Facebook: http://facebook.com/menelion

- Original message -
From: Steve Staples sstap...@mnsi.net
To: php-general@lists.php.net php-general@lists.php.net
Date: Monday, December 6, 2010, 6:41:34 PM
Subject: [PHP] Redirect output to a file on the web server

On Mon, 2010-12-06 at 16:19 +, Richard Quadling wrote:
 On 6 December 2010 15:46, Ferdi ferdinan...@printo.in wrote:
  On 6 December 2010 20:47, Steve Staples sstap...@mnsi.net wrote:
 
  On Mon, 2010-12-06 at 20:29 +0530, Ferdi wrote:
   Greetings List members,
  
   I have a script that takes quite a while to run, one or two hours, I wish
  to
   redirect the normal php output to a file on the webserver itself. I don't
   mind if in the process, the browser displays a blank page. The reason I
  want
   to do this is that if the script crashes or the browser Is closed by
   mistake, I have absolutely no record of where the script stopped running.
  
   I could use code like below
   At the beginning of the script:
   ob_start();
  
   At the end of the script:
   $page = ob_get_contents();
   ob_end_flush();
   $fp = fopen(output.html,w);
   fwrite($fp,$page);
   fclose($fp);
  
   However, I see some problems with this:
   I'm not too sure of the size of the output. It may balloon to over the
   buffering limit (in PHP? Apache?) and then what happens?
   Secondly, if the script crashes before the end, I won't get any output.
   Finally, I am using a library in the script that outputs status and error
   messages of its own. So, if I manually opened a file and used fwrite()
   alongside echo for my messages, I would lose out on those messages.
  
   Anybody has any pointers on how you could send the output not only to a
   browser, but also to a file on the webserver? If not, at least to a file?
  
   Thanks and regards,
   Ferdi
 
  Just curious, but if it takes that long to run, why are you running it
  from a browser?  why not run it from the commandline, that way you dont
  have to change your php.ini for the webserver (increasing the timeout,
  memory limits, etc etc... you can change those for the CLI only?
 
  2 hours is a long time to hope that the browser doesn't close, or
  connectivity doesn't get interupted for even 1 microsecond...
 
  if the script has breaks in it, where it starts to do something else,
  you can put in an email to yourself, to say hey, we're HERE now
 
  but i would look into running it from the CLI over the webserver, you
  would be less likely to run into issues on something that takes that
  amount of time to run.
 
  If you needed the output to be displayed on a webpage, you can write the
  progress to a file, and then have a php webpage that reads the file, and
  using ajax or whatever, refresh the content.
 
  good luck in your script, and if you still run it from the browser, and
  need to output to a file, then i would continually be writing content to
  that file, every time you do soemthing, or start another part of the
  script so you know EXACTLY where you are, at all times...
 
  Steve
 
 
  Hi Steve,
 
  Thanks for the tips. To answer your queries, I don't mind using CLI. How do
  I then ensure the messages, error or otherwise, output by the library I use,
  show up in the file I'm outputting to? Please note that I only make calls to
  the functions and object methods from this library and error or success
  messages are probably echo'd by the code from the library.
 
  I believe some context is in order. I am actually sending an email to a
  large number of our customers (around 10,000), each with the customer's
  name.
 
  My script does output a simple success or failure message. The library
  outputs more technical info. All I would like to know is which email got
  sent and which one failed. As you point out, I could write the success /
  failure messages to a file, but, I would also like to capture the messages
  output by the library.
 
  Thanks and regards,
  Ferdi
 
 
 I would log the success/failure with the data (assuming it is coming from a 
 DB).
 
 If not, you could use a simple file_put_contents($filename, date('r')
 . $text . PHP_EOL, FILE_APPEND);
 
 That would append 1 line of text at a time to the file. Using tail on
 that file would show you the last work done (and when it was done).
 
 
 -- 
 Richard Quadling
 Twitter : EE : Zend
 @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
 

if you're using a linux based server, you could log (like Richard said)
each success / failure to the file, or each to its own success / failure
file, and then if you want to watch the, you could just do a tail -f of
the file, to see what is it doing (sometimes having it scroll is pretty
handy i find)... 

it wouldn't be hard to write a web-based 'tail -f' page, so you