Solución:
Si está utilizando la configuración de nginx que viene con magento, debe poner un archivo dentro pub
carpeta para permitir el acceso desde el navegador, ya que pub es la raíz del documento de vhost. El directorio raíz de Magento está un nivel más arriba. La segunda de todas las configuraciones predeterminadas para nginx solo permite acceder index.php
, get.php
, static.php
, report.php
, 404.php
y 503.php
archivos. Cualquier otro no es procesado por php. Puedes ver esto en línea con location ~ (index|get|static|report|404|503).php$ {
en nginx.conf.sample. Si no lo está usando, verifique su configuración para ver una regla similar. Para permitir que se pueda acceder a otro archivo desde el navegador, simplemente agregue otro nombre después de 503 o cambie los corchetes completos con location ~* .php$ {
Por ejemplo, para obtener el nombre del producto mediante el script personalizado
Ejemplo 1:
Crear test.php
en la raíz de 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 MagentoFrameworkAppBootstrap;
require 'app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('MagentoFrameworkAppState');
$state->setAreaCode('frontend');
$id = 1;
$product = $objectManager->create('MagentoCatalogModelProduct')->load($id);
echo $product->getName();
Puedes ejecutar un script test.php
por
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 = MagentoFrameworkAppBootstrap::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 MagentoFrameworkAppHttp
implements MagentoFrameworkAppInterface {
public function launch()
{
$this->_state->setAreaCode('frontend'); //Set area code 'frontend' or 'adminhtml
$id = 12;
$_product = $this->_objectManager->create('MagentoCatalogModelProduct')->load($id);
echo $_product->getName();
return $this->_response;
}
public function catchException(MagentoFrameworkAppBootstrap $bootstrap, Exception $exception)
{
return false;
}
}
Ahora puede ejecutar este script personalizado
http://127.0.0.1/magento2/test/
Si quieres permitir más de uno php para que 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
scripts
en el/pub
carpeta - edita tu
magento
vhost 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