2012-11-18 126 views
3

我必須使用一個生產服務器。我可以通過apache使用Symfony2所需的PHP版本,但不能在使用舊版PHP的CLI中使用。從網絡瀏覽器運行Symfony2控制檯命令

所以我的問題是...有什麼辦法可以從網絡瀏覽器運行控制檯命令?因此,將console文件移動到服務器根目錄並做一些更改......稍後,出於安全原因,當然,該文件將存儲在根目錄之外。

+0

改編也許與['EXEC()'](HTTP://nl3.php .NET/EXEC)? –

+0

感謝您的評論@WouterJ。我嘗試過,但它使用CLI PHP。當然,因爲'exec'在CLI中執行一個命令:) –

+0

我的歉意...我生活一樣:( – Carles

回答

1

據我所知,不過你應該只使用Apache使用的php版本!或者在你的.bash_profile/.zshrc中設置一個別名: 別名php ='/ path/to/php/used/by/apache/bin/php' 或者總是運行app/console,路徑爲php /path/to/php/used/by/apache/bin/php app/console

或者如果配置/ php.ini是問題,請確定使用哪一個: php -i | grep php.ini 結果: 加載配置文件=> /etc/php5/cli/php.ini「例如 您可以使用不同的配置文件--php-ini或-c參數: php -c在/ etc/PHP5/CGI -i | grep的php.ini中

+0

謝謝,它應該工作,問題是我在一個監獄的殼,不能訪問Apache的PHP二進制文件 –

3

我想。從瀏覽器清除緩存,整個ConsoleBundle(請參閱接受上面提到的答案)對我來說太過分了(對於我的用戶而言,仍然太過於討厭)。我發現你可以在沒有它提供的用戶界面的情況下輕鬆使用這個包。

// 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)創建一個文件.BAT到Web目錄喜歡這裏:

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> 

凡總之,我得到的交值(命令行輸入例如「緩存:清除」),我執行它到。蝙蝠文件通過命令:

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

3) 當你執行URL www.tuodominio.it/console.php你會看到的形式,你可以輸入你的命令(如高速緩存:明確)。 爲了我的安慰,進入bat文件我已經設置了「應用/控制檯」部分,所以我必須對數字進行「緩存:清除」或「資產:安裝」等。

+0

嗨,羅伯託,我知道這已經有一段時間了,因爲這是張貼,你會如此善良,並幫助我創建Linux版本的console.bat ? – user1970395

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); 
} 

https://github.com/jerome-fix/symfony-cmf-standard-with-sonata/blob/master/web/reload-fixtures.php