Como executo o script personalizado php no magento2


9

Eu queria adicionar script php personalizado à pasta raiz do magento2 e executar a partir do navegador. Tentei adicioná-lo na pasta raiz do magento2, mas ele redireciona para a página 404.

Eu também tentei adicioná-lo na pasta pub, mas sem sucesso.

Também limpo cache e geração.

Estou executando o magento2 no servidor nginx


Soa estranho. Eu criei o script test.php no diretório raiz do magento2, então eu o chamo de navegador http: //%magento-base-url%/test.php e é trabalho.
Valery Statichnyi 14/01

Estou executando magento2 em nginx servidor
Ranjit Shinde

Respostas:


19

Se você estiver usando a configuração nginx que acompanha o magento, precisará colocar um arquivo dentro da pubpasta para permitir o acesso a ele pelo navegador, pois pub é a raiz do documento do vhost. O diretório raiz do Magento está um nível acima. Em segundo lugar configuração padrão para nginx permite apenas para acesso index.php, get.php, static.php, report.php, 404.phpe 503.phparquivos. Qualquer outro não é processado pelo php. Você pode ver isso alinhado com location ~ (index|get|static|report|404|503)\.php$ {nginx.conf.sample. Se você não o estiver usando, verifique sua configuração para obter uma regra semelhante. Para permitir que outro arquivo seja acessível no navegador, adicione outro nome após 503 ou altere colchetes inteiros comlocation ~* \.php$ {


Preciso reiniciar o nginxafter change?
ravisoni

Sim, qualquer alteração no vhost requer pelo menos recarregar.
Zefiryn

Graças cara seu trabalho
Pandurang

12

Por exemplo, para obter o nome do produto pelo script personalizado

Exemplo 1:

Crie test.phpna raiz do 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();

Você pode executar script test.phppor

http://127.0.0.1/magento2/test.php

Exemplo 2:

passo 1: crie o index.php na raiz do 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);

etapa 2: criar 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;
    }

}

Agora você pode executar esse script personalizado

http://127.0.0.1/magento2/test/

insira a descrição da imagem aqui


11
Eu recebi um erro 'classe customScript não encontrado', então eu adicionei 'require' ./customScript.php 'antes de' $ app = $ bootstrap-> createApplication ('customScript'); ' e isso funcionou.
Zankar

Estou recebendo erro de página não encontrada
ravisoni

11
@ravisoni, isso significa que você fez algo errado. Certifique-se de criar a pasta / test / e dois arquivos index.php e outro customScript.php
Electroid

11
@ Zankar, você precisa colocar seu arquivo customScript.php na mesma pasta (subpasta de sitedir) que o arquivo index.php. Do seu código ./customScript.phpeu posso ver que o seu customScript.php é um nível acima do index.php
Electroid

@electroid no meu caso, o customScript.phparquivo está no mesmo diretório que index.php. Se eu estava incluindo-o a partir de uma pasta um nível acima que eu faria ../customScript.php(note os dois pontos)
Zankar

2

Se você deseja permitir que mais de um script php seja executável como eu preciso (import.php para o produto de importação ERP, stock.php para atualizar o inventário com o meu ERP etc ...):

  • crie um novo diretório scriptsna /pubpasta
  • edite seu magentovhost e adicione linhas em##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;
        }
     }

Com isso, agora você pode executar seus scripts acessando-os em:

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

Muito útil. Obrigado.
rupi 22/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.