Antworten:
@ denish, sagen wir mit cmd können Sie den Cache leeren. Aber dein Problem bei der PHP-Kommandozeile
Um den PHP-Client als Befehl im Fenster auszuführen, müssen Sie PHP als verfügbare Umgebung festlegen. Wie wird die Umgebungsvariable für PHP festgelegt?
Danach können Sie einen beliebigen magento 2 cli-Befehl von cmd like ausführen
php bin/magento cache:clean
php bin/magento cache:flush
Or
php bin/magento c:c
php bin/magento c:f
Bei Ihrem Projektstandort von cmd
Der folgende Code leert den Cache programmgesteuert. Es hat gut funktioniert für mich.
Fall 1: Außerhalb von 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();
}
Fall 2: In 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();
}
Das Hardcodieren der Typen ist eine schlechte Idee. Stattdessen können Sie dieselbe Methode verwenden, die auch von den Befehlen cache:flush
und verwendet wird cache:clean
. Die Cache-Manager-Klasse kann auch alle Cache-Typen für Sie abrufen, wie im folgenden Beispiel beschrieben.
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());
}
Um die Antwort von denish zu ergänzen, könnten Sie ein kleines PHP-Skript schreiben und es in Ihrem Magento-Stammordner ablegen:
<?php
$command = 'php bin/magento cache:clean && php bin/magento cache:flush';
echo '<pre>' . shell_exec($command) . '</pre>';
?>
Dies gibt Ihnen eine Ausgabe wie:
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
Bitte stellen Sie sicher, dass Sie PHP tatsächlich über die Befehlszeile ausführen können, da dies sonst unbrauchbar wird. Für Windows müssen Sie sicherstellen, dass Sie die php.exe zu Ihrem PATH in den Umgebungsvariablen hinzugefügt haben. Siehe http://willj.co/2012/10/run-wamp-php-windows-7-command-line/
Sie können den gesamten Cache mit den folgenden Befehlen leeren oder aktualisieren
php bin/magento cache:clean
php bin/magento cache:flush
Ich hoffe, dies wird dir helfen.
CLI
Open Magento Root geben Sie dann ein, um den Cache auf php bin/magento cache:clean
diese Weise zu leeren und alle Befehle einzugeben. Weitere Informationen klicken Sie auf diesen Link
1. Konstruktor definieren - übergeben
Magento \ Framework \ App \ Cache \ TypeListInterface
und
Magento \ Framework \ App \ Cache \ Frontend \ Pool
an den unten definierten Konstruktor Ihrer Datei: -
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. Fügen Sie nun der Methode, mit der Sie den Cache löschen / leeren möchten, folgenden Code hinzu: -
$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();
}
Ich hoffe das wird nützlich für dich. :)
Erstellen Sie eine Datei mit dem Namen cacheflush.php und laden Sie Ihren Magento-Stammordner wie public_html des httdocs-Ordners hoch. dann yoursite.com/cacheflush.php Es wird perfekt funktionieren. Wenn Sie keinen CLI-Mod in Ihrem Hosting haben, kein Problem ... verwenden Sie einfach diesen Code ... es wird Ihre Zeit reduzieren.
<?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();
}
}
?>
das hat bei mir funktioniert
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());