3

我必须使用糟糕的生产服务器。我可以通过 apache 使用 Symfony2 所需的 PHP 版本,但不能在使用旧 PHP 版本的 CLI 中使用。

所以我的问题是......有什么办法可以从网络浏览器运行控制台命令?所以,将console文件移动到服务器根目录并做一些更改......后来,出于安全原因,当然,这个文件将存储在根目录之外。

4

6 回答 6

12

浏览器中有一个用于控制台的捆绑包。

https://github.com/winzou/ConsoleBundle

它用于共享服务器。

于 2012-11-19T08:45:32.537 回答
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 
于 2013-08-17T05:01:55.230 回答
3

我最近尝试安装上面提到的 ConsoleBundle,但作曲家说它被放弃了。而不是使用这个:https ://github.com/CoreSphere/ConsoleBundle

于 2015-04-28T19:14:29.067 回答
1

据我所知,您应该只使用 Apache 使用的 php 版本!在 .bash_profile / .zshrc 中设置别名: alias php='/path/to/php/used/by/apache/bin/php' 或始终使用 php /path/to/ 的整个路径运行 app/console php/used/by/apache/bin/php 应用程序/控制台

或者如果配置/php.ini 是问题,找出使用哪个: php -i | grep php.ini 结果:加载的配置文件 => /etc/php5/cli/php.ini" 例如您可以使用带有 --php-ini 或 -c 参数的不同配置文件: php -c /etc/php5 /cgi -i | grep php.ini

于 2012-11-19T00:26:36.553 回答
0

我为这个问题提出了一个定制的解决方案。

经过一上午的痛苦和绝望的尝试找到一个好的解决方案,下面是您问题的答案。

1)像这里一样在网络目录中创建一个文件.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>

在哪里总结,我得到了帖子值(命令行输入,例如“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”等

于 2013-10-25T14:17:12.023 回答
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

于 2016-04-13T17:06:51.033 回答