2012-11-18 3 views
3

나는 프로덕션 서버를 사용해야합니다. Symfony2에서 필요한 PHP 버전을 아파치를 통해 사용할 수 있지만, 구 버전의 PHP를 사용하는 CLI에서는 사용할 수 없습니다.웹 브라우저에서 Symfony2 콘솔 명령을 실행하십시오.

제 질문은 ... 웹 브라우저에서 콘솔 명령을 실행할 수있는 방법이 있습니까? 따라서 console 파일을 서버 루트 디렉터리로 이동하고 몇 가지 변경 작업을 수행하십시오 ... 나중에 보안상의 이유로이 파일은 루트 외부에 저장됩니다.

+0

에서 적응

<pre> <?php $output = $return_var= null; $command = __DIR__.'/../app/console -v cache:clear -e=prod'; echo "Running: $command\n"; exec($command, $output, $return_var); if (!empty($output) && is_array($output)) { echo "Output:\n"; foreach ($output as $line) { echo $line."\n"; } } else { echo 'Cache could not be cleared: '.var_export($return_var, true); } 

을 .net/exec)? –

+0

@WouterJ에 대한 귀하의 의견을 보내 주셔서 감사합니다. 나는 이것을 시도했지만 CLI PHP를 사용한다. 물론, exec가 CLI에서 명령을 실행하기 때문에 :) –

+0

내 사과 ... 나는 똑같이 살고있다. ( – Carles

답변

1

내가 아는 한 아니지만 Apache에서 사용하는 PHP 버전을 사용해야합니다! .bash_profile/.zshrc에 별칭을 설정하십시오 : 별칭 php = '/ 경로/to/php/used/by apache/bin/php' 또는 항상 app/console을 실행하여 /path// apache/bin/php app/console

또는 configuration/php.ini가 문제가있는 경우 어떤 것이 사용되는지 알아보십시오. php -i | grep php.ini 결과 : 과 같이 로드 된 구성 파일 = /etc/php5/cli/php.ini "--php-ini 또는 -c 매개 변수와 함께 다른 구성 파일을 사용할 수 있습니다 : php -c 은/etc/PHP5/CGI의 -i | 그렙 php.ini의

+0

고마워, 그게 효과가있어, 문제는 내가 감옥에있는 쉘에있어. access apache php binary –

3

내가 원하는.. 브라우저에서 캐시를 지우려면 전체 ConsoleBundle (accep ted 대답은 위의) 내게 너무 많이 (여전히 내 사용자에 대한 너무 괴상한). 내가 제공하는 사용자 인터페이스없이이 번들을 쉽게 사용할 수 있다는 것을 알았습니다.

// install the bundle & run this code, e.g. in a controller 
$console = new \CoreSphere\ConsoleBundle\Executer\CommandExecuter($this->container->get('kernel')); 
$response = $console->execute("cache:clear --env=prod"); 
var_dump($response); // returns output and error code etc 
0

이 문제에 대한 맞춤 솔루션을 제공했습니다.

통증이 심하고 좋은 해결책을 찾기 위해 필사적으로 노력한 후, 질문에 대한 답변 아래.

1) 여기처럼 웹 디렉토리에 박쥐 파일 을 만듭니다

your_symfony_dir/www/web/console.bat

이 파일 console.bat입니다 내용 :

set cmd=%~1 
cd .. 
php app/console %cmd% 

2) 만들기 파일 .php 웹에 여기에 같이 :

your_symfony_dir/www/web/console.php

이파일 console.php입니다 내용 :

요약, 난 포스트 값 (예를 들어, 명령 줄 입력을받을
<?php 
if (!preg_match('/^192\.168\.(1)\.[0-9]+$/', $_SERVER['REMOTE_ADDR'])) { 
    die("Access Denied!"); 
} 
?> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Console</title> 
    </head> 
    <body style='font-family: monospace;'> 
     <h1>Console</h1> 
     <form method='POST'> 
      <fieldset> 
       <legend>Comandi base</legend>    
       <p><button name='pre_cmd[]' value='cache:clear'>Clear Cache</button></p> 
       <p><button name='pre_cmd[]' value='assets:install'>Install Assets</button></p> 
      </fieldset> 
      <fieldset> 
       <legend>Comando personalizzato</legend>    
       <p>php app/console <input type='text' name='cmd' value='' /><input type='submit' value='Esegui' name='submit' /> <input type='reset' value='Annulla' /></p> 
      </fieldset> 
     </form> 
     <?php 
     if ($_POST) { 
      $cmd = $_POST['cmd'] ? $_POST['cmd'] : (is_array($_POST['pre_cmd']) ? $_POST['pre_cmd'][0] : false); 
      if ($cmd) { 
       echo "<div style='color:white;background:black;padding:10px'>"; 
       echo "<pre>"; 
       $output = array(); 
       exec($_SERVER['DOCUMENT_ROOT'] . '\console.bat "' . $cmd . '"', $output); 
       foreach ($output as $o) { 
        echo htmlspecialchars($o); 
        echo PHP_EOL; 
       } 
       echo "</pre>"; 
       echo "</div>"; 
      } else { 
       echo "<p>Comando vuoto</p>"; 
      } 
     } 
     ?> 
    </body> 
</html> 

"cache : clear") 그리고 난 에 그것을 실행합니다.명령을 통해 박쥐 파일 : URL이 www.tuodominio.it/console.php을 실행할 수 있습니다 때

exec($_SERVER['DOCUMENT_ROOT'] . '\console.bat "' . $cmd . '"', $output); 

3) 당신이 입력 할 수 있습니다 명령 (캐시와 같은 형태를 볼 수 있습니다 :명확한). 내 안락함을 위해 방금 "앱/콘솔"부분을 설정 했으므로 "캐시 : 지우기"또는 "자산 : 설치"등 숫자를 표시해야합니다.

+0

안녕하세요 로베르토,이 게시물이 게시 된 지 꽤 오래 됐는지 알고 있습니다. 친절하니, 리눅스 버전의 console.bat을 만들 때 도와주세요. ? – user1970395

관련 문제