Wie führe ich ein benutzerdefiniertes PHP-Skript auf magento2 aus?

9

Ich wollte dem magento2-Stammordner ein benutzerdefiniertes PHP-Skript hinzufügen und über den Browser ausführen. Ich habe versucht, es im magento2-Stammordner hinzuzufügen, aber es leitet zur 404-Seite weiter.

Ich habe auch versucht, es in Pub-Ordner hinzuzufügen, aber kein Erfolg.

Auch Cache und Generierung gelöscht.

Ich verwende magento2 auf einem Nginx-Server

Ranjit Shinde
quelle
Hört sich komisch an. Ich habe das Skript test.php im Stammverzeichnis von magento2 erstellt und es dann einfach über den Browser http: //%magento-base-url%/test.php aufgerufen, und es funktioniert.
Valery Statichnyi
Ich verwende magento2 auf dem Nginx-Server
Ranjit Shinde

Antworten:

19

Wenn Sie die mit Magento gelieferte Nginx-Konfiguration verwenden, müssen Sie eine Datei in den pubOrdner legen , um über den Browser darauf zugreifen zu können, da pub das Dokumentstammverzeichnis des vhost ist. Magento-Root-Verzeichnis ist eine Ebene höher. Zweite aller Standardkonfiguration für nginx erlaubt nur den Zugriff index.php, get.php, static.php, report.php, 404.phpund 503.phpDateien. Alle anderen werden vom PHP nicht verarbeitet. Sie können dies in Übereinstimmung mit location ~ (index|get|static|report|404|503)\.php$ {in nginx.conf.sample sehen. Wenn Sie es nicht verwenden, überprüfen Sie Ihre Konfiguration auf ähnliche Regeln. Um den Zugriff auf eine andere Datei über den Browser zu ermöglichen, fügen Sie nach 503 einfach einen anderen Namen hinzu oder ändern Sie ganze Klammern mitlocation ~* \.php$ {

Zefiryn
quelle
Muss ich nginx nach der Änderung neu starten?
Ravisoni
Ja, jede Änderung an vhost erfordert mindestens ein erneutes Laden.
Zefiryn
Danke Mann, es funktioniert
Pandurang
11

Zum Beispiel, um den Produktnamen über das benutzerdefinierte Skript abzurufen

Beispiel 1:

Erstellen Sie test.phpan der Wurzel von 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();

Sie können das Skript test.phpvon ausführen

http://127.0.0.1/magento2/test.php

Beispiel 2:

Schritt 1: Erstellen Sie index.php im Stammverzeichnis von 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);

Schritt 2: Erstellen Sie 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;
    }

}

Jetzt können Sie dieses benutzerdefinierte Skript von ausführen

http://127.0.0.1/magento2/test/

Geben Sie hier die Bildbeschreibung ein

Prinz Patel
quelle
1
Ich habe den Fehler 'class customScript not found' erhalten und habe 'require' ./customScript.php 'vor' $ app = $ bootstrap-> createApplication ('customScript'); 'hinzugefügt. und das hat funktioniert.
Zankar
Ich bekomme Seite nicht gefunden Fehler
Ravisoni
1
@ravisoni, das heißt, du hast etwas falsch gemacht. Achten Sie darauf , erstellen Ordner / Test / und zwei Dateien index.php und anderen customScript.php
Electroid
1
@Zankar, Sie müssen Ihre Datei customScript.php im selben Ordner (Unterordner von sitedir) wie die Datei index.php ablegen. Aus Ihrem Code ./customScript.phpkann ich sehen, dass Ihre customScript.php eine Ebene höher ist als index.php
electroid
@electroid in meinem Fall befindet sich die customScript.phpDatei im selben Verzeichnis wie index.php. Wenn ich es aus einem Ordner auf einer Ebene ../customScript.php
höher aufnehmen
2

Wenn Sie möchten, dass mehr als ein PHP-Skript wie erforderlich ausführbar ist (import.php für ERP-Importprodukte, stock.php für die Aktualisierung des Inventars mit meinem ERP usw.):

  • Erstellen Sie ein neues Verzeichnis scriptsim /pubOrdner
  • Bearbeiten Sie Ihren magentovhost und fügen Sie Zeilen unter hinzu##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;
        }
     }

Damit können Sie jetzt Ihre Skripte ausführen, indem Sie auf sie zugreifen unter:

http://www.example.com/scripts/your_custom_code.php
Urbansurfer
quelle
Sehr hilfreich. Vielen Dank.
Rupi