ウィンドウシステムでMagento 2のプログラムを使用してキャッシュを更新する


12

スクリプトを介してMagento2キャッシュを更新またはフラッシュできるコードを探しています。

Magento 1.xではとても簡単でした。

WAMPサーバー(ウィンドウ)でMagento2を実行しています。

回答:


2

@denish、たとえばcmdを使用して、キャッシュをクリアできます。しかし、PHPコマンドラインでの問題

ウィンドウでコマンドとしてphpクライアントを実行するには、phpを使用可能な 環境として設定する必要があります 。PHPのenv変数を設定する方法は?

その後、次のようなコマンドから任意のmagento 2 cliコマンドを実行できます

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

cmdからプロジェクトの場所に移動するとき


同じように、magento 1のステップは何ですか
zus

23

以下のコードはプログラムでキャッシュをフラッシュします。それは私にとってはうまくいきました。

ケース1: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();
}

ケース2: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();
}

特定の製品のスタックをクリーンアップするだけでよい場合は、stackoverflow.com
Gediminas

16

タイプをハードコーディングすることは悪い考えです。代わりに、cache:flushおよびcache:cleanコマンドで使用されるのと同じ方法を使用できます。キャッシュマネージャークラスは、以下の例のように、すべてのキャッシュタイプをプルすることもできます。

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());
}

2

denishの答えに追加するには、小さなphpスクリプトを記述して、それをmagentoルートフォルダーに配置します。

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

これにより、次のような出力が得られます。

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

コマンドラインから実際にphpを実行できることを確認してください。そうしないと、役に立たなくなります。Windowsの場合、php.exeを環境変数のPATHに追加したことを確認する必要があります。http://willj.co/2012/10/run-wamp-php-windows-7-command-line/を参照してください


それは何も示していません
アルネンドラ2016

1
Windowsの場合、php.exeを環境変数のPATHに追加したことを確認する必要があります。見てくださいwillj.co/2012/10/run-wamp-php-windows-7-command-line
tecjam

PHPでshell_exec()を使用できる場合、インストールは安全ではありません。この機能は、ライブ環境では無効にする必要があります。
frustratedtech

2

次のコマンドを使用して、すべてのキャッシュをフラッシュまたはリフレッシュできます

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

これがお役に立てば幸いです。


ウィンドウでそれを行う方法?
アルネンドラ2016

@Arunendra、CLI開いているmagentoルートで、次のように入力してキャッシュをクリアし、php bin/magento cache:cleanすべてのコマンドを入力します。詳細このリンクをクリック
Bojjaiah

同じように、magento 1のステップは何ですか
zus '27

1

1.コンストラクタを定義する–渡す

Magento \ Framework \ App \ Cache \ TypeListInterface

そして

Magento \ Framework \ App \ Cache \ Frontend \ Pool

以下に定義されているようにファイルのコンストラクタに:

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.次に、キャッシュをクリア/フラッシュするメソッドに次のコードを追加します。

$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();
}

これがあなたに役立つことを願っています。


0

cacheflush.phpという名前のファイルを作成し、httdocsフォルダーのpublic_htmlのようなMagentoルートフォルダーをアップロードします。次に、yoursite.com / cacheflush.php完全に機能します。ホスティングにCLI modがない場合は問題ありません。このコードを使用するだけで、時間を短縮できます。

<?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();
            }
        }
    ?>

0

これは私のために働いた

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cacheManager = $objectManager->create('Magento\Framework\App\Cache\Manager');
$cacheManager->flush($cacheManager->getAvailableTypes());
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.