我必須使用一個生產服務器。我可以通過apache使用Symfony2所需的PHP版本,但不能在使用舊版PHP的CLI中使用。從網絡瀏覽器運行Symfony2控制檯命令
所以我的問題是...有什麼辦法可以從網絡瀏覽器運行控制檯命令?因此,將console
文件移動到服務器根目錄並做一些更改......稍後,出於安全原因,當然,該文件將存儲在根目錄之外。
我必須使用一個生產服務器。我可以通過apache使用Symfony2所需的PHP版本,但不能在使用舊版PHP的CLI中使用。從網絡瀏覽器運行Symfony2控制檯命令
所以我的問題是...有什麼辦法可以從網絡瀏覽器運行控制檯命令?因此,將console
文件移動到服務器根目錄並做一些更改......稍後,出於安全原因,當然,該文件將存儲在根目錄之外。
據我所知,不過你應該只使用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中
謝謝,它應該工作,問題是我在一個監獄的殼,不能訪問Apache的PHP二進制文件 –
我想。從瀏覽器清除緩存,整個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
我爲此問題提出了一個定製的解決方案。
經過一整個上午的痛苦和絕望的嘗試找到一個好的解決方案,下面的問題的答案。
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文件我已經設置了「應用/控制檯」部分,所以我必須對數字進行「緩存:清除」或「資產:安裝」等。
嗨,羅伯託,我知道這已經有一段時間了,因爲這是張貼,你會如此善良,並幫助我創建Linux版本的console.bat ? – user1970395
我最近試過安裝在上面講述了ConsoleBundle,但作曲家說它已經被放棄了。而不是使用這樣的:https://github.com/CoreSphere/ConsoleBundle
運行命令的更簡單的解決方案:
<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從
改編也許與['EXEC()'](HTTP://nl3.php .NET/EXEC)? –
感謝您的評論@WouterJ。我嘗試過,但它使用CLI PHP。當然,因爲'exec'在CLI中執行一個命令:) –
我的歉意...我生活一樣:( – Carles