¿Cómo ejecuto script PHP personalizado en magento2?

9

Quería agregar un script php personalizado a la carpeta raíz de magento2 y ejecutarlo desde el navegador. Traté de agregarlo en la carpeta raíz de magento2 pero redirige a la página 404.

También intenté agregarlo en la carpeta pub pero no tuve éxito.

También borró el caché y la generación.

Estoy ejecutando magento2 en el servidor nginx

Ranjit Shinde
fuente
Suena extraño. Creé el script test.php en el directorio raíz de magento2, luego lo llamo desde el navegador http: //%magento-base-url%/test.php y funciona.
Valery Statichnyi
Estoy ejecutando magento2 en el servidor nginx
Ranjit Shinde

Respuestas:

19

Si está utilizando la configuración nginx que viene con magento, debe colocar un archivo dentro de la pubcarpeta para permitir el acceso desde el navegador, ya que pub es la raíz del documento del vhost. El directorio raíz de Magento está un nivel arriba. En segundo lugar configuración por defecto para nginx permite sólo al acceso index.php, get.php, static.php, report.php, 404.phpy 503.phparchivos. Cualquier otro no es procesado por el php. Puede ver esto en línea con location ~ (index|get|static|report|404|503)\.php$ {nginx.conf.sample. Si no lo está utilizando, verifique su configuración para una regla similar. Para permitir que otro archivo sea accesible desde el navegador, simplemente agregue otro nombre después de 503 o cambie los corchetes completos conlocation ~* \.php$ {

Zefiryn
fuente
¿Necesito reiniciar nginxafter change?
ravisoni
Sí, cualquier cambio en vhost requiere al menos recargar.
Zefiryn
Gracias hombre está funcionando
Pandurang
12

Por ejemplo, para obtener el nombre del producto mediante el script personalizado

Ejemplo 1:

Crea test.phpen la raíz de 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();

Puede ejecutar el script test.phppor

http://127.0.0.1/magento2/test.php

Ejemplo 2

paso 1: crea index.php en la raíz de 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);

paso 2: crea 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;
    }

}

Ahora puede ejecutar este script personalizado al

http://127.0.0.1/magento2/test/

ingrese la descripción de la imagen aquí

Príncipe Patel
fuente
1
Recibí un error 'clase customScript no encontrado', así que agregué 'require' ./customScript.php 'antes de' $ app = $ bootstrap-> createApplication ('customScript'); ' Y eso funcionó.
Zankar
Recibo un error de página no encontrada
ravisoni
1
@ravisoni, eso significa que hiciste algo mal. Asegúrese de crear la carpeta / prueba / y dos archivos index.php y otro customScript.php
electroid
1
@Zankar, debe colocar su archivo customScript.php en la misma carpeta (subcarpeta de sitedir) que el archivo index.php. Desde su código ./customScript.php, puedo ver que su customScript.php está un nivel por encima de index.php
electroide
@electroid en mi caso el customScript.phparchivo está en el mismo directorio que index.php. Si lo incluyera desde una carpeta de un nivel superior lo haría ../customScript.php(tenga en cuenta los dos puntos)
Zankar
2

Si desea permitir que más de un script php sea ejecutable como lo necesito (import.php para el producto de importación ERP, stock.php para actualizar el inventario con mi ERP, etc.):

  • crear un nuevo directorio scriptsen la /pubcarpeta
  • edite su magentovhost y agregue líneas debajo##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;
        }
     }

Con esto, ahora puede ejecutar sus scripts accediendo a ellos en:

http://www.example.com/scripts/your_custom_code.php
urbansurfers
fuente
Muy útil. Gracias.
rupi