66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Process Component
 | |
| =================
 | |
| 
 | |
| Process executes commands in sub-processes.
 | |
| 
 | |
| In this example, we run a simple directory listing and get the result back:
 | |
| 
 | |
| ```php
 | |
| use Symfony\Component\Process\Process;
 | |
| use Symfony\Component\Process\Exception\ProcessFailedException;
 | |
| 
 | |
| $process = new Process('ls -lsa');
 | |
| $process->setTimeout(3600);
 | |
| $process->run();
 | |
| if (!$process->isSuccessful()) {
 | |
|     throw new ProcessFailedException($process);
 | |
| }
 | |
| 
 | |
| print $process->getOutput();
 | |
| ```
 | |
| 
 | |
| You can think that this is easy to achieve with plain PHP but it's not especially
 | |
| if you want to take care of the subtle differences between the different platforms.
 | |
| 
 | |
| You can simplify the code by using `mustRun()` instead of `run()`, which will
 | |
| throw a `ProcessFailedException` automatically in case of a problem:
 | |
| 
 | |
| ```php
 | |
| use Symfony\Component\Process\Process;
 | |
| 
 | |
| $process = new Process('ls -lsa');
 | |
| $process->setTimeout(3600);
 | |
| $process->mustRun();
 | |
| 
 | |
| print $process->getOutput();
 | |
| ```
 | |
| 
 | |
| And if you want to be able to get some feedback in real-time, just pass an
 | |
| anonymous function to the ``run()`` method and you will get the output buffer
 | |
| as it becomes available:
 | |
| 
 | |
| ```php
 | |
| use Symfony\Component\Process\Process;
 | |
| 
 | |
| $process = new Process('ls -lsa');
 | |
| $process->run(function ($type, $buffer) {
 | |
|     if (Process::ERR === $type) {
 | |
|         echo 'ERR > '.$buffer;
 | |
|     } else {
 | |
|         echo 'OUT > '.$buffer;
 | |
|     }
 | |
| });
 | |
| ```
 | |
| 
 | |
| That's great if you want to execute a long running command (like rsync-ing files to a
 | |
| remote server) and give feedback to the user in real-time.
 | |
| 
 | |
| Resources
 | |
| ---------
 | |
| 
 | |
| You can run the unit tests with the following command:
 | |
| 
 | |
|     $ cd path/to/Symfony/Component/Process/
 | |
|     $ composer install
 | |
|     $ phpunit
 |