magento2でphpカスタムスクリプトを実行する方法


9

カスタムphpスクリプトをmagento2ルートフォルダーに追加してブラウザーから実行したいのですが、magento2ルートフォルダーに追加しようとしましたが、404ページにリダイレクトされます。

私もpubフォルダーに追加しようとしましたが、成功しませんでした。

キャッシュと生成もクリアしました。

nginxサーバーでmagento2を実行しています


奇妙に聞こえます。magento2のルートディレクトリにtest.phpスクリプトを作成し、ブラウザhttp://%magento-base-url%/test.phpから呼び出すだけで動作します。
Valery Statichnyi

nginxサーバーでmagento2を実行しています
Ranjit Shinde

回答:


19

magentoに付属するnginx設定を使用している場合pub、pubはvhostのドキュメントルートであるため、ファイルをブラウザーからアクセスできるようにフォルダー内に配置する必要があります。Magentoのルートディレクトリは1つ上のレベルです。nginxのためのすべてのデフォルト設定の第二は、のみアクセスすることができますindex.phpget.phpstatic.phpreport.php404.phpおよび503.phpファイル。他のものは、phpによって処理されません。これlocation ~ (index|get|static|report|404|503)\.php$ {はnginx.conf.sample に沿って確認できます。使用していない場合は、設定で同様のルールを確認してください。ブラウザから別のファイルにアクセスできるようにするには、503の後に別の名前を追加するか、かっこ全体を次のように変更しますlocation ~* \.php$ {


nginxafter変更を再起動する必要がありますか?
ravisoni

はい、vhostを変更した場合は、少なくともリロードが必要です。
Zefiryn

おかげでその作業
パンドゥラン

12

たとえば、カスタムスクリプトで製品名を取得するには

例1:

test.phpMagentoのルートで作成var/www/html/magento2/test.php

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('memory_limit', '5G');
error_reporting(E_ALL);

use Magento\Framework\App\Bootstrap;
require 'app/bootstrap.php';

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

$objectManager = $bootstrap->getObjectManager();

$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');

$id = 1;
$product = $objectManager->create('\Magento\Catalog\Model\Product')->load($id);

echo $product->getName();

あなたは、スクリプトを実行することができますtest.phpによって、

http://127.0.0.1/magento2/test.php

例2:

ステップ1:magento 2のルートにindex.phpを作成する

var/www/htmlmagento2/test/index.php

<?php
require __DIR__ . '../../app/bootstrap.php';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$app = $bootstrap->createApplication('customScript');
$bootstrap->run($app);

ステップ2:customScript.phpを作成する

/var/www/html/magento2/test/customScript.php

<?php
class customScript
    extends \Magento\Framework\App\Http
    implements \Magento\Framework\AppInterface {
    public function launch()
    {
        $this->_state->setAreaCode('frontend'); //Set area code 'frontend' or 'adminhtml
        $id = 12;
        $_product = $this->_objectManager->create('\Magento\Catalog\Model\Product')->load($id);

        echo $_product->getName();

        return $this->_response;
    }

    public function catchException(\Magento\Framework\App\Bootstrap $bootstrap, \Exception $exception)
    {
        return false;
    }

}

これで、このカスタムスクリプトを実行できます

http://127.0.0.1/magento2/test/

ここに画像の説明を入力してください


1
「class customScript not found」というエラーが発生したので、「$ app = $ bootstrap-> createApplication( 'customScript');」の前に「require './customScript.php」を追加しました。そしてそれはうまくいった。
ザンカー

ページが見つかりませんというエラーが表示される
ravisoni

1
@ravisoni、それはあなたが何か間違ったことをしたことを意味します。フォルダー/ test /と2つのファイルindex.phpとその他​​の1つのcustomScript.phpを必ず作成してください
Electroid

1
@ Zankar、customScript.phpファイルをindex.phpファイルと同じフォルダー(sitedirのサブフォルダー)に配置する必要があります。あなたのコードから、./customScript.phpあなたのcustomScript.phpがindex.phpから1レベル上にあることがわかります
Electroid

@electroid私の場合、customScript.phpファイルはと同じディレクトリにありindex.phpます。私はどうなるまでフォルダ1レベルから、それを含めた場合../customScript.php(2つのドットに注意)
Zankar

2

私が必要とするように複数の phpスクリプトを実行可能にしたい場合(ERPインポート製品の場合はimport.php、ERPで在庫を更新する場合はstock.phpなど):

  • フォルダに新しいディレクトリscriptsを作成し/pubます
  • magento仮想ホストを編集して、下に行を追加します##Allow pub/srcipts/ folder to execute php custom

     listen 80;
     server_name example.com www.example.com;

     set $MAGE_ROOT /var/www/html/magento2;
     include /var/www/html/magento2/nginx.conf.sample;

     ## Allow pub/srcipts/ folder to execute php custom
     location /scripts/ {
        location ~* \.php$ {
                try_files $uri =404;
                fastcgi_pass   fastcgi_backend;
                fastcgi_buffers 1024 4k;

                fastcgi_read_timeout 600s;
                fastcgi_connect_timeout 600s;

                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
     }

これで、次の場所にアクセスしてスクリプトを実行できるようになります。

http://www.example.com/scripts/your_custom_code.php

非常に役立ちます。ありがとうございました。
1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.