Bagaimana cara menjalankan skrip khusus php di magento2

9

Saya ingin menambahkan skrip php khusus ke folder root magento2 dan menjalankannya dari browser. Saya mencoba menambahkannya di folder root magento2 tetapi dialihkan ke halaman 404.

Saya juga mencoba menambahkannya di folder pub tetapi tidak berhasil.

Juga membersihkan cache dan generasi.

Saya menjalankan magento2 di server nginx

Ranjit Shinde
sumber
Terdengar aneh. Saya membuat skrip test.php dalam direktori root magento2, lalu saya sebut saja dari browser http: //%magento-base-url%/test.php dan itu berfungsi.
Valery Statichnyi
Saya menjalankan magento2 di server nginx
Ranjit Shinde

Jawaban:

19

Jika Anda menggunakan konfigurasi nginx yang dilengkapi dengan magento, Anda perlu meletakkan file di dalam pubfolder untuk memungkinkan akses dari browser karena pub adalah root dokumen dari vhost. Dir root magento naik satu tingkat. Kedua dari semua konfigurasi default untuk nginx memungkinkan hanya untuk mengakses index.php, get.php, static.php, report.php, 404.phpdan 503.phpfile. Yang lain tidak diproses oleh php. Anda dapat melihat ini sejalan dengan location ~ (index|get|static|report|404|503)\.php$ {di nginx.conf.sample. Jika Anda tidak menggunakannya periksa konfigurasi untuk aturan yang sama. Agar file lain dapat diakses dari browser, tambahkan nama lain setelah 503 atau ubah seluruh tanda kurung denganlocation ~* \.php$ {

Zefiryn
sumber
Apakah saya perlu memulai ulang nginx setelah perubahan?
ravisoni
Ya, setiap perubahan ke vhost memerlukan setidaknya memuat ulang.
Zefiryn
Terima kasih
kawannya
12

Misalnya, untuk mendapatkan nama produk dengan skrip khusus

Contoh 1:

Buat test.phpdi root 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();

Anda dapat menjalankan skrip test.phpdengan

http://127.0.0.1/magento2/test.php

Contoh 2:

langkah 1: buat index.php di root 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);

langkah 2: buat 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;
    }

}

Sekarang Anda dapat menjalankan skrip khusus ini dengan

http://127.0.0.1/magento2/test/

masukkan deskripsi gambar di sini

Pangeran Patel
sumber
1
Saya mendapat kesalahan 'customScript kelas tidak ditemukan' jadi saya menambahkan 'memerlukan' ./customScript.php 'sebelum' $ app = $ bootstrap-> createApplication ('customScript'); ' dan itu berhasil.
Zankar
Saya mendapatkan halaman yang tidak ditemukan kesalahan
ravisoni
1
@ravisoni, itu berarti Anda melakukan sesuatu yang salah. Pastikan untuk membuat folder / test / dan dua file index.php dan lainnya customScript.php
electroid
1
@Zankar, Anda perlu menempatkan file customScript.php Anda di folder yang sama (subfolder dari sitedir) sebagai file index.php. Dari kode Anda, ./customScript.phpsaya dapat melihat bahwa customScript.php Anda naik satu tingkat dari index.php
electroid
@electroid dalam kasus saya customScript.phpfile berada di direktori yang sama dengan index.php. Jika saya memasukkannya dari folder satu tingkat ke atas, saya akan melakukannya ../customScript.php(perhatikan dua titik)
Zankar
2

Jika Anda ingin agar lebih dari satu skrip php dapat dieksekusi seperti yang saya butuhkan (import.php untuk produk impor ERP, stock.php untuk memperbarui inventaris dengan ERP saya dll ...):

  • buat direktori baru scriptsdi /pubfolder
  • edit magentovhost Anda dan tambahkan baris di bawah##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;
        }
     }

Dengan ini, Anda sekarang dapat menjalankan skrip Anda dengan mengaksesnya di:

http://www.example.com/scripts/your_custom_code.php
urbansurfers
sumber
Sangat membantu. Terima kasih.
rupi