Как мне запустить скрипт php на magento2

9

Я хотел добавить собственный скрипт php в корневую папку magento2 и запустить из браузера. Я пытался добавить его в корневую папку magento2, но он перенаправляет на страницу 404.

Я также попытался добавить его в папку pub, но безуспешно.

Также очищен кеш и генерация.

Я использую magento2 на сервере nginx

Ранджит Шинде
источник
Звучит странно Я создал скрипт test.php в корневом каталоге magento2, затем просто вызываю его из браузера http: //%magento-base-url%/test.php, и он работает.
Валерий Статичный
Я использую magento2 на сервере nginx
Ранджит Шинде,

Ответы:

19

Если вы используете конфигурацию nginx, поставляемую с magento, вам нужно поместить файл в pubпапку, чтобы разрешить доступ к нему из браузера, так как pub является корнем документа vhost. Magento root dir на один уровень выше. Во - вторых конфигурации по умолчанию для 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$ {

Zefiryn
источник
Нужно ли перезапустить nginxafter change?
Рависони
Да, любое изменение vhost требует как минимум перезагрузки.
Зефирин
Спасибо, человек работает
Pandurang
12

Например, чтобы получить название продукта с помощью пользовательского скрипта

Пример 1:

Создать test.phpв корне Magentovar/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: создайте index.php в корне magento 2

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
Я получил сообщение об ошибке «класс customScript не найден», поэтому я добавил «require» ./customScript.php »перед« $ app = $ bootstrap-> createApplication ('customScript'); " и это сработало.
Занкар
Я получаю страницу не найдена ошибка
ravisoni
1
@ravisoni, это значит, что ты сделал что-то не так. Убедитесь в том , чтобы создать папку / тест / и два файла index.php и другие один customScript.php
electroid
1
@Zankar, вам нужно поместить файл customScript.php в ту же папку (подпапку из sitedir), что и файл index.php. Из вашего кода ./customScript.phpя вижу, что ваш customScript.php на один уровень выше index.php
electroid
@electroid в моем случае customScript.phpфайл находится в том же каталоге, что и index.php. Если бы я включал его из папки на один уровень выше, я бы сделал ../customScript.php(обратите внимание на две точки)
Занкар
3

Если вы хотите разрешить выполнение более чем одного сценария php так, как мне нужно (import.php для продукта импорта ERP, stock.php для обновления инвентаря с помощью моего ERP и т. Д.):

  • создать новый каталог scriptsв /pubпапке
  • отредактируйте свой magentovhost и добавьте строки под##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
urbansurfers
источник
Очень полезно. Спасибо.
Рупи