Odśwież pamięć podręczną programowo w Magento 2 w systemie Windows

12

Szukam kodu, który może odświeżyć lub opróżnić pamięć podręczną Magento2 za pomocą skryptu.

W Magento 1.x było to takie proste.

Używam Magento2 na serwerze WAMP (okno).

Arunendra
źródło

Odpowiedzi:

2

@ denish, powiedzmy, używając cmd możesz wyczyścić pamięć podręczną. Ale twój problem w linii poleceń php

Aby uruchomić klienta php jako polecenie w oknie, musisz ustawić php jako dostępne środowisko. Jak ustawić zmienną env dla PHP?

Następnie możesz uruchomić dowolne polecenie magento 2 cli z cmd like

php bin/magento cache:clean
php bin/magento cache:flush
           Or
php bin/magento c:c
php bin/magento c:f

Podczas wizyty w lokalizacji projektu z cmd

Amit Bera
źródło
tak samo, jakie są kroki dla Magento 1.
zus
23

Poniższy kod programowo opróżnia pamięć podręczną. Dla mnie działało dobrze.

Przypadek 1: Poza Magento

use Magento\Framework\App\Bootstrap;
include('../app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();


try{
    $_cacheTypeList = $objectManager->create('Magento\Framework\App\Cache\TypeListInterface');
    $_cacheFrontendPool = $objectManager->create('Magento\Framework\App\Cache\Frontend\Pool');
    $types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
    foreach ($types as $type) {
        $_cacheTypeList->cleanType($type);
    }
    foreach ($_cacheFrontendPool as $cacheFrontend) {
        $cacheFrontend->getBackend()->clean();
    }
}catch(Exception $e){
    echo $msg = 'Error : '.$e->getMessage();die();
}

Przypadek 2: Wewnątrz Magento

public function __construct(
    Context $context,
    \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
    \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
) {
    parent::__construct($context);
    $this->_cacheTypeList = $cacheTypeList;
    $this->_cacheFrontendPool = $cacheFrontendPool;
}


$types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
foreach ($types as $type) {
    $this->_cacheTypeList->cleanType($type);
}
foreach ($this->_cacheFrontendPool as $cacheFrontend) {
    $cacheFrontend->getBackend()->clean();
}
Ipsita Rout
źródło
Jeśli trzeba tylko wyczyścić pamięć podręczną określonego produktu stackoverflow.com/a/42636405/3733214
Gediminas
16

Kodowanie typów jest złym pomysłem. Zamiast tego możesz użyć tej samej metody, której używają polecenia cache:flushi cache:clean. Klasa menedżera pamięci podręcznej może również pobrać dla ciebie wszystkie typy pamięci podręcznej, jak pokazano w poniższym przykładzie.

public function __construct(
    \Magento\Framework\App\Cache\Manager $cacheManager
) {
    $this->cacheManager = $cacheManager;
}

private function whereYouNeedToCleanCache()
{
    $this->cacheManager->flush($this->cacheManager->getAvailableTypes());

    // or this
    $this->cacheManager->clean($this->cacheManager->getAvailableTypes());
}
Pmclain
źródło
2

Aby dodać do odpowiedzi denisha, możesz napisać mały skrypt php i umieścić go w folderze głównym magento:

<?php
    $command = 'php bin/magento cache:clean && php bin/magento cache:flush';
    echo '<pre>' . shell_exec($command) . '</pre>';
?>

To da ci wyjście takie jak:

Cleaned cache types:
config
layout
block_html
collections
reflection
db_ddl
eav
config_integration
config_integration_api
full_page
translate
config_webservice
Flushed cache types:
config
layout
block_html
collections
reflection
db_ddl
eav
config_integration
config_integration_api
full_page
translate
config_webservice

Upewnij się, że faktycznie możesz wykonać php z linii poleceń, w przeciwnym razie będzie to bezużyteczne. W przypadku systemu Windows musisz upewnić się, że dodałeś plik php.exe do ŚCIEŻKI w zmiennych środowiskowych. Proszę zobaczyć http://willj.co/2012/10/run-wamp-php-windows-7-command-line/

tecjam
źródło
nic nie pokazuje
Arunendra
1
W przypadku systemu Windows musisz upewnić się, że dodałeś plik php.exe do ŚCIEŻKI w zmiennych środowiskowych. Zobacz willj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam
Jeśli możesz użyć powłoki shell_exec () dla PHP, to instalacja nie jest bezpieczna. Tę funkcję należy wyłączyć w środowisku na żywo.
frustratedtech,
2

Możesz opróżnić lub odświeżyć całą pamięć podręczną za pomocą następujących poleceń

php bin/magento cache:clean   
php bin/magento cache:flush

Mam nadzieję, że to Ci pomoże.

Denish Vachhani
źródło
Jak to zrobić w oknie?
Arunendra
@Arunendra, W CLIotwartym katalogu głównym magento następnie wprowadź, aby wyczyścić pamięć podręczną, w php bin/magento cache:cleanten sposób wprowadź wszystkie polecenia. Więcej informacji kliknij ten link
Bojjaiah
jak to samo, jakie są kroki dla Magento 1
zus
1

1. Zdefiniuj konstruktor - zaliczenie

Magento \ Framework \ App \ Cache \ TypeListInterface

i

Magento \ Framework \ App \ Cache \ Frontend \ Pool

do konstruktora pliku, jak zdefiniowano poniżej: -

public function __construct(
    Context $context,
    \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
    \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
) {
    parent::__construct($context);
    $this->_cacheTypeList = $cacheTypeList;
    $this->_cacheFrontendPool = $cacheFrontendPool;
}

2. Teraz dodaj następujący kod do metody, w której chcesz wyczyścić / opróżnić pamięć podręczną: -

$types = array('config','layout','block_html','collections','reflection','db_ddl','eav','config_integration','config_integration_api','full_page','translate','config_webservice');
foreach ($types as $type) {
    $this->_cacheTypeList->cleanType($type);
}
foreach ($this->_cacheFrontendPool as $cacheFrontend) {
    $cacheFrontend->getBackend()->clean();
}

Mam nadzieję, że ci się przyda. :)

Rohan Hapani
źródło
0

utwórz plik o nazwie cacheflush.php i załaduj folder główny Magento, taki jak public_html folderu httdocs. następnie yoursite.com/cacheflush.php Będzie działać idealnie. Jeśli nie masz żadnych modów CLI na swoim serwerze, nie ma problemu ... po prostu użyj tego kodu ... skróci to twój czas.

<?php

        use Magento\Framework\App\Bootstrap;

        require __DIR__ . '/app/bootstrap.php';

        $bootstrap = Bootstrap::create(BP, $_SERVER);

        $obj = $bootstrap->getObjectManager();

        $state = $obj->get('Magento\Framework\App\State');
        $state->setAreaCode('frontend');
        $k[0]='bin/magento';
        $k[1]='cache:flush'; // write your proper command like setup:upgrade,cache:enable etc...
        $_SERVER['argv']=$k;
        try {
            $handler = new \Magento\Framework\App\ErrorHandler();
            set_error_handler([$handler, 'handler']);
            $application = new Magento\Framework\Console\Cli('Magento CLI');
            $application->run();
        } catch (\Exception $e) {
            while ($e) {
                echo $e->getMessage();
                echo $e->getTraceAsString();
                echo "\n\n";
                $e = $e->getPrevious();
            }
        }
    ?>
Atish Dipankar Baidya
źródło
-1

to zadziałało dla mnie

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
Sandy Lampropoulou
źródło