我必须使用糟糕的生产服务器。我可以通过apache使用Symfony2所需的PHP版本,但不能使用较旧的PHP版本的CLI。
所以我的问题是......有什么方法可以从网络浏览器运行控制台命令?因此,将console
文件移动到服务器根目录并进行一些更改......稍后,出于安全原因,此文件将存储在根目录之外。
答案 0 :(得分:12)
答案 1 :(得分: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
答案 2 :(得分:3)
我最近尝试安装上面提到的ConsoleBundle,但作曲家说它已经被放弃了。而不是使用它:https://github.com/CoreSphere/ConsoleBundle
答案 3 :(得分:1)
据我所知,你应该只使用Apache使用的php版本!在.bash_profile / .zshrc中设置别名: alias php ='/ path / to / php / used / by / apache / bin / php' 或者总是使用php的完整路径运行app / console / 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
答案 4 :(得分:0)
我为这个问题提出了一个定制的解决方案。
经过一整个上午的痛苦和绝望的努力找到一个好的解决方案,在你问题的答案之下。
1)在web目录中创建一个 .bat 文件,如下所示:
your_symfony_dir/www/web/console.bat
这是 console.bat 文件的内容:
set cmd=%~1
cd ..
php app/console %cmd%
2)在web目录中创建一个文件 .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>
在摘要中,我获得了post值(命令行输入,例如“cache:clear”),并通过命令将其执行到 .bat 文件中:
exec($_SERVER['DOCUMENT_ROOT'] . '\console.bat "' . $cmd . '"', $output);
3) 当您执行url www.tuodominio.it/console.php 时,您将看到可以输入命令的表单(如cache:clear)。 为了我的安慰,进入bat文件我已经设置了“app / console”部分,所以我只需要数字“cache:clear”或“assets:install”等等
答案 5 :(得分: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