Come posso eseguire script personalizzati php su magento2


9

Volevo aggiungere uno script php personalizzato alla cartella principale di magento2 ed eseguirlo dal browser. Ho provato ad aggiungerlo nella cartella principale di magento2 ma reindirizza alla pagina 404.

Ho anche provato ad aggiungerlo nella cartella pub ma senza successo.

Anche cache e generazione cancellate.

Sto eseguendo magento2 sul server nginx


Sembra strano. Ho creato lo script test.php nella directory principale magento2, quindi lo chiamo dal browser http: //%magento-base-url%/test.php ed è funzionante.
Valery Statichnyi,

Sto eseguendo magento2 sul server nginx
Ranjit Shinde

Risposte:


19

Se si utilizza la configurazione nginx fornita con magento, è necessario inserire un file nella pubcartella per consentire l'accesso ad esso dal browser poiché pub è la radice del documento del vhost. La directory principale di Magento è di un livello superiore. In secondo luogo configurazione di default per nginx permette solo di accesso index.php, get.php, static.php, report.php, 404.phpe 503.phpfile. Qualsiasi altro non viene elaborato dal php. Puoi vederlo in linea con location ~ (index|get|static|report|404|503)\.php$ {in nginx.conf.sample. Se non lo stai usando, controlla la tua configurazione per una regola simile. Per consentire a un altro file di essere accessibile dal browser, aggiungere un altro nome dopo 503 o cambiare parentesi intere conlocation ~* \.php$ {


Devo riavviare nginxafter change?
Ravisoni,

Sì, qualsiasi modifica a vhost richiede almeno il ricaricamento.
Zefiryn,

Grazie l'uomo funziona
Pandurang

12

Ad esempio, per ottenere il nome del prodotto dallo script personalizzato

Esempio 1:

Crea test.phpalla radice di 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();

Puoi eseguire lo script test.phpdi

http://127.0.0.1/magento2/test.php

Esempio 2:

passaggio 1: crea index.php alla radice di 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);

passaggio 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;
    }

}

Ora puoi eseguire questo script personalizzato da

http://127.0.0.1/magento2/test/

inserisci qui la descrizione dell'immagine


1
Ho ricevuto un errore "classe customScript non trovata", quindi ho aggiunto "richiedono" ./customScript.php "prima di" $ app = $ bootstrap-> createApplication ('customScript'); ' e ha funzionato.
Zankar,

Ricevo un errore di pagina non trovata
Ravisoni,

1
@ravisoni, significa che hai fatto qualcosa di sbagliato. Assicurarsi di creare la cartella / prova / e due file index.php e altro customScript.php
electroid

1
@Zankar, devi posizionare il tuo file customScript.php nella stessa cartella (sottocartella da sitedir) del file index.php. Dal tuo codice ./customScript.phpposso vedere che il tuo customScript.php è a un livello superiore da index.php
electroid

@electroid nel mio caso il customScript.phpfile si trova nella stessa directory di index.php. Se lo ../customScript.php
includessi

3

Se vuoi consentire l'esecuzione di più di uno script php come ho bisogno (import.php per il prodotto di importazione ERP, stock.php per aggiornare l'inventario con il mio ERP ecc ...):

  • crea una nuova directory scriptsnella /pubcartella
  • modifica il tuo magentovhost e aggiungi le righe in##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 questo ora puoi eseguire i tuoi script accedendo a:

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

Molto utile. Grazie.
rupi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.