Comment exécuter un script php personnalisé sur magento2

9

Je voulais ajouter un script php personnalisé au dossier racine magento2 et l'exécuter à partir du navigateur.J'ai essayé de l'ajouter dans le dossier racine magento2 mais il redirige vers la page 404.

J'ai également essayé de l'ajouter dans le dossier pub mais sans succès.

Également effacé le cache et la génération.

J'utilise magento2 sur le serveur nginx

Ranjit Shinde
la source
Cela semble étrange. J'ai créé le script test.php dans le répertoire racine de magento2, puis je l'appelle simplement depuis le navigateur http: //%magento-base-url%/test.php et ça marche.
Valery Statichnyi
J'utilise magento2 sur le serveur nginx
Ranjit Shinde

Réponses:

19

Si vous utilisez la configuration nginx fournie avec magento, vous devez placer un fichier dans un pubdossier pour y accéder depuis le navigateur car pub est la racine du document du vhost. Le répertoire racine de Magento est d'un niveau supérieur. Deuxièmement config par défaut pour nginx ne permet d'accéder index.php, get.php, static.php, report.php, 404.phpet les 503.phpfichiers. Les autres ne sont pas traités par le php. Vous pouvez le voir en ligne avec location ~ (index|get|static|report|404|503)\.php$ {dans nginx.conf.sample. Si vous ne l'utilisez pas, vérifiez votre configuration pour une règle similaire. Pour permettre à un autre fichier d'être accessible à partir du navigateur, ajoutez simplement un autre nom après 503 ou modifiez des crochets entiers aveclocation ~* \.php$ {

Zefiryn
la source
Dois-je redémarrer nginx après le changement?
ravisoni
Oui, toute modification de vhost nécessite au moins un rechargement.
Zefiryn
Merci l'homme son travail
Pandurang
12

Par exemple, pour obtenir le nom du produit par le script personnalisé

Exemple 1:

Créez test.phpà la racine 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();

Vous pouvez exécuter le script test.phpen

http://127.0.0.1/magento2/test.php

Exemple 2:

étape 1: créer index.php à la racine 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);

étape 2: créer 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;
    }

}

Vous pouvez maintenant exécuter ce script personnalisé en

http://127.0.0.1/magento2/test/

entrez la description de l'image ici

Prince Patel
la source
1
J'ai reçu une erreur «classe customScript introuvable», j'ai donc ajouté «require» ./customScript.php »avant« $ app = $ bootstrap-> createApplication ('customScript'); ' et cela a fonctionné.
Zankar
Je reçois une erreur de page non trouvée
ravisoni
1
@ravisoni, cela signifie que vous avez fait quelque chose de mal. Assurez-vous de créer le dossier / test / et deux fichiers index.php et un autre customScript.php
electroid
1
@Zankar, vous devez placer votre fichier customScript.php dans le même dossier (sous-dossier de sitedir) que le fichier index.php. D'après votre code, ./customScript.phpje peux voir que votre customScript.php est d'un niveau supérieur à index.php
electroid
@electroid dans mon cas, le customScript.phpfichier se trouve dans le même répertoire que index.php. Si je l' ../customScript.php
incluais à
2

Si vous souhaitez autoriser plus d'un script php pour être exécutable comme je l' ai besoin (import.php pour les produits d'importation ERP, stock.php pour la mise à jour de l'inventaire avec mon ERP etc ...):

  • créer un nouveau répertoire scriptsdans le /pubdossier
  • éditez votre magentovhost et ajoutez des lignes sous##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;
        }
     }

Avec cela, vous pouvez maintenant exécuter vos scripts en y accédant à:

http://www.example.com/scripts/your_custom_code.php
Urbansurfers
la source
Très utile. Je vous remercie.
rupi