diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
index 5f3ea5dffb..fb8b285fc6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
@@ -15,6 +15,7 @@ use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\ProcessBuilder;
/**
@@ -29,7 +30,7 @@ class ServerRunCommand extends ContainerAwareCommand
*/
public function isEnabled()
{
- if (PHP_VERSION_ID < 50400) {
+ if (PHP_VERSION_ID < 50400 || defined('HHVM_VERSION')) {
return false;
}
@@ -99,24 +100,13 @@ EOF
$output->writeln('Running PHP built-in server in production environment is NOT recommended!');
}
- $router = $input->getOption('router') ?: $this
- ->getContainer()
- ->get('kernel')
- ->locateResource(sprintf('@FrameworkBundle/Resources/config/router_%s.php', $env))
- ;
-
- if (!file_exists($router)) {
- $output->writeln(sprintf('The given router script "%s" does not exist', $router));
-
+ if (null === $builder = $this->createPhpProcessBuilder($input, $output, $env)) {
return 1;
}
- $router = realpath($router);
-
$output->writeln(sprintf("Server running on http://%s\n", $input->getArgument('address')));
$output->writeln('Quit the server with CONTROL-C.');
- $builder = new ProcessBuilder(array(PHP_BINARY, '-S', $input->getArgument('address'), $router));
$builder->setWorkingDirectory($documentRoot);
$builder->setTimeout(null);
$process = $builder->getProcess();
@@ -136,4 +126,30 @@ EOF
return $process->getExitCode();
}
+
+ private function createPhpProcessBuilder(InputInterface $input, OutputInterface $output, $env)
+ {
+ $router = $input->getOption('router') ?: $this
+ ->getContainer()
+ ->get('kernel')
+ ->locateResource(sprintf('@FrameworkBundle/Resources/config/router_%s.php', $env))
+ ;
+
+ if (!file_exists($router)) {
+ $output->writeln(sprintf('The given router script "%s" does not exist', $router));
+
+ return;
+ }
+
+ $router = realpath($router);
+ $finder = new PhpExecutableFinder();
+
+ if (false === $binary = $finder->find()) {
+ $output->writeln('Unable to find PHP binary to run server');
+
+ return;
+ }
+
+ return new ProcessBuilder(array($binary, '-S', $input->getArgument('address'), $router));
+ }
}