My project build process involves complex tasks & they are time consuming. If I execute Phing
command line, I want end-user to display real time information on browser, about what's happening about the build (step by step).
Using exec()
will execute the process and will print the output, but I don't want such behavior.
Is there a way where I can capture data step by step?
You want to send Phing output/status lines
directly to a browser in real-time. To asynchronously send status from Phing output to a browser you can use the following example code.
pipe.php
of Phing + System("...") CMDThe following is an example usage of php system()
and phing
command line in combination
<?php system("phing -args... | ./pipe.php"); ?>
Visit the following URL to receive output:
Copy this into a pipe.php
file and make it chmod +x pipe.php
executable. Also download this dependency: https://github.com/pubnub/php
#!php
<?php
##
## -- pipe.php --
##
## command | ./pipe.php
##
## Create new TCP Session Route (send-to-browser)
require_once('Pubnub.php');
$pubnub = new Pubnub( "demo", "demo", "", false );
## Load STDIN String
$handle = fopen( 'php://stdin', 'r' );
while($phing_out = fgets( $handle, 512 )) {
$phing_out = trim($phing_out);
$pubnub->publish(array(
'channel' => 'phing-out',
'message' => $phing_out
));
}
fclose($handle);
?>
That's it! Note that this is only a starting point and if you want to go further you may need to send the output into your own HTML file. See more details below:
If you'd like to receive Output in your own HTML file, you'll want to refer to the following GitHub Repository: https://github.com/pubnub/javascript
<div id=out></div>
<script src=http://cdn.pubnub.com/pubnub-3.5.3.min.js ></script>
<script>(function(){
// Init
var pubnub = PUBNUB.init({
publish_key : 'demo',
subscribe_key : 'demo'
})
// HTML Display Node (for visual output)
var out = pubnub.$('out')
// TCP Receive
pubnub.subscribe({
channel : "phing-out",
message : function(m){ out.innerHTML += m + "<br>" }
})
})();</script>