drkstr Posted August 30, 2006 Share Posted August 30, 2006 Hello,I need to be able to run some system commands and scripts which will have a lot of output. I would like to be able to not just it all dump to the screen in a long scrolling list. Is there some way to control the output and have it do things like when it reaches the max allowed lines, it just starts shifting up, erasing the top?I'm not afraid of reading, but I'm not sure where to start. Can someone point me in the right direction?Thanks!...drkstrPS: I would also like to build a "shell consol" form that simulates a system shell in the browser. This will not happen until further down the road, but if anyone has any ideas about how to attack this problem, I would really like to hear them. Thanks again! Quote Link to comment Share on other sites More sharing options...
Satria Ox41464b Posted August 30, 2006 Share Posted August 30, 2006 have you check http://php.net/outcontrol ? Quote Link to comment Share on other sites More sharing options...
Jenk Posted August 30, 2006 Share Posted August 30, 2006 Use shell_exec() instead of system(), shell_exec() returns all output as a string instead of directly outputting. Quote Link to comment Share on other sites More sharing options...
drkstr Posted August 30, 2006 Author Share Posted August 30, 2006 [quote author=Satria Ox41464b link=topic=106190.msg424463#msg424463 date=1156915453]have you check http://php.net/outcontrol ?[/quote]No I didn't. Thanks, that looks like what I was looking for.[quote author=Jenk link=topic=106190.msg424526#msg424526 date=1156928577]Use shell_exec() instead of system(), shell_exec() returns all output as a string instead of directly outputting.[/quote]Awesome, thanks for the tip.So if I understand you two correctly, I can start the output buffer with ob_start(), read the output to the command in as a string, explode it into an array of lines by prex_split'ing at "/\n/", then if count > x amount of lines, array_shift the first element off the array, then implode it back to a string and print it to the output buffer?Thanks for the help everyone,...drkstr Quote Link to comment Share on other sites More sharing options...
Jenk Posted August 30, 2006 Share Posted August 30, 2006 no need for preg_split, just follow the below example:[code]<?php$output = explode("\n", shell_exec($command));foreach ($output as $line) { echo '<p>' . $line . '</p>';}?>[/code] Quote Link to comment Share on other sites More sharing options...
drkstr Posted August 31, 2006 Author Share Posted August 31, 2006 I don't know if that will do it for me, but I could be wrong. I need to have a continual stream open for the output. It's not a command that will just run once and send some output, I need to be able to display the output in real time while the process runs. Is this even possible?Thanks for the help!...drkstr Quote Link to comment Share on other sites More sharing options...
trq Posted August 31, 2006 Share Posted August 31, 2006 [quote]It's not a command that will just run once and send some output, I need to be able to display the output in real time while the process runs. Is this even possible?[/quote]If your talking about attempting this within a server / browser environment then the simple answer is no. You could maybe take it on using some javascript and xhttprequest trickery, but that opens a whole new can of worms (Ajax).The thing is, even using shell_exec() the string will not be handed to php until the command is finished proccessing. You would have to fake the [i]real time appearence[/i] and I really dont think thats what you want, nor do I see the point. Quote Link to comment Share on other sites More sharing options...
drkstr Posted August 31, 2006 Author Share Posted August 31, 2006 I was afraid of this :(Unfortunately, it must be done one way or another. I will have to look into Ajax.Thanks for the tip!...drkstr Quote Link to comment Share on other sites More sharing options...
Jenk Posted August 31, 2006 Share Posted August 31, 2006 AJAX won't help you anymore than PHP. Why? AJAX does not execute anything on the server. Quote Link to comment Share on other sites More sharing options...
drkstr Posted August 31, 2006 Author Share Posted August 31, 2006 Well from what I have read so far, I think I might be able to do it this way. (keep in mind I'm still just tossing around ideas)I can write a shell script which starts a command and dumps the output as raw data to a file (well call it output.txt). It would over write any previous data, and delete the file when there is no more output. The PHP will run the shell script in the background, pause for a second or two, then start a while( file_exists("output.txt") ) loop which reads in the contents of the file, wraps XML tags around it, and makes it available as an XML object to the AJAX client script. The client side would then grab an update of the XML object being hosted on a predefined interval depending on the available bandwidth.Does this sound doable at all? Maybe there is an easier way?Thanks,...drkstr Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.