Php 以编程方式清除symfony 2上的缓存

Php 以编程方式清除symfony 2上的缓存,php,symfony,caching,Php,Symfony,Caching,我正试图通过我的应用程序清空symfony2缓存,就像我在做php应用程序/控制台缓存:clear 我尝试过许多不同的解决方案,例如: //solution 1 $process = new Process('php '.__DIR__.'/../../../../../app/console cache:clear'); $process->setTimeout(3600); $process->run(); //solution 2 $input = new StringInp

我正试图通过我的应用程序清空symfony2缓存,就像我在做
php应用程序/控制台缓存:clear

我尝试过许多不同的解决方案,例如:

//solution 1
$process = new Process('php '.__DIR__.'/../../../../../app/console cache:clear');
$process->setTimeout(3600);
$process->run();

//solution 2
$input = new StringInput(null);
$output = new NullConfigurationOutput();
$command = new CacheClearCommand();
$command->setContainer($container);
$command->run($input, $output);

//solution 3    
$container->get('cache_clearer')->clear($container->getParameter('kernel.cache_dir'));
我还尝试
rm-Rf
缓存文件夹

他们没有一个是完全工作,因为我得到了很多错误。以下是我在解决方案2中遇到的错误(这似乎是最好的):

无法启动会话:已由PHP启动($\已设置会话)

似乎Symfony正在尝试在呈现过程中重建页面或重新启动应用程序

如何通过一些php代码清除缓存

编辑: 由于我的路由系统,我实际上正在尝试重新生成缓存。我制作了一个捆绑包,它采用symfony 2路线,并添加了为SEO目的重写它的可能性(例如:我有一个指向/category的front_category路线,通过这个捆绑包,我可以将其重写为category SEO optimized.html)


如果我在一个需要特定参数的路由上,比如ID,我需要为它创建一个特殊的路由,以便重写它。例如,对于/category/3,我需要创建一个名为category_3和。。为了让symfony知道我更改了路由系统,我必须清除缓存。

这里已经回答了一个类似的问题:-3月20日15:37 pomaxa回答

我已经测试并扩展了pomaxa的代码:

控制器代码

use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;

$command = $this->container->get('yourservice.cache.clear');
//$dynamicEnvMode = $this->container->getParameter('kernel.environment')
$staticEnvMode = 'dev'; // to use develop mode
$staticEnvMode = 'prod --no-debug'; // to use production mode
$input = new ArgvInput(array('--env=' . $staticEnvMode ));
$output = new ConsoleOutput();
$command->run($input, $output);
我使用静态环境模式,并尝试使用CacheClearCommand对象而不是服务,但没有成功。缓存清除操作可能需要很长时间才能加载,因此使用服务可能会更好

最好的方法是在不清除缓存的情况下解决您的问题。查找快速变化的实体、操作或任何您需要的内容,并禁用它们的缓存。
如果您发布了一个详细的问题(并将链接放在注释中),为什么需要忽略缓存和位置,那么我可以帮助您找到另一种方法。

与我刚才遇到的问题完全相同。 对我来说,最简单的解决方案是:

use Symfony\Component\Filesystem\Filesystem;
在控制器中:

$fs = new Filesystem();
$fs->remove($this->container->getParameter('kernel.cache_dir'));

这将删除当前环境的缓存目录。

此处回答:此解决方案似乎不适用于Symfony 3。在S3应用程序中,这会导致
“无法删除文件”…\var\cache\prod\sessions\sess.
这会导致生产服务器停机。这会导致web服务器挂起并超时。(交响乐3.4,PHP 7.1)