カスタムphpスクリプトをmagento2ルートフォルダーに追加してブラウザーから実行したいのですが、magento2ルートフォルダーに追加しようとしましたが、404ページにリダイレクトされます。
私もpubフォルダーに追加しようとしましたが、成功しませんでした。
キャッシュと生成もクリアしました。
nginxサーバーでmagento2を実行しています
カスタムphpスクリプトをmagento2ルートフォルダーに追加してブラウザーから実行したいのですが、magento2ルートフォルダーに追加しようとしましたが、404ページにリダイレクトされます。
私もpubフォルダーに追加しようとしましたが、成功しませんでした。
キャッシュと生成もクリアしました。
nginxサーバーでmagento2を実行しています
回答:
magentoに付属するnginx設定を使用している場合pub
、pubはvhostのドキュメントルートであるため、ファイルをブラウザーからアクセスできるようにフォルダー内に配置する必要があります。Magentoのルートディレクトリは1つ上のレベルです。nginxのためのすべてのデフォルト設定の第二は、のみアクセスすることができますindex.php
、get.php
、static.php
、report.php
、404.php
および503.php
ファイル。他のものは、phpによって処理されません。これlocation ~ (index|get|static|report|404|503)\.php$ {
はnginx.conf.sample に沿って確認できます。使用していない場合は、設定で同様のルールを確認してください。ブラウザから別のファイルにアクセスできるようにするには、503の後に別の名前を追加するか、かっこ全体を次のように変更しますlocation ~* \.php$ {
たとえば、カスタムスクリプトで製品名を取得するには
例1:
test.php
Magentoのルートで作成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;
}
}
これで、このカスタムスクリプトを実行できます
./customScript.php
あなたのcustomScript.phpがindex.phpから1レベル上にあることがわかります
customScript.php
ファイルはと同じディレクトリにありindex.php
ます。私はどうなるまでフォルダ1レベルから、それを含めた場合../customScript.php
(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