Làm cách nào để chạy tập lệnh tùy chỉnh php trên magento2


9

Tôi muốn thêm tập lệnh php tùy chỉnh vào thư mục gốc magento2 và chạy từ trình duyệt. Tôi đã cố gắng thêm nó vào thư mục gốc magento2 nhưng nó chuyển hướng đến trang 404.

Tôi cũng đã thử thêm nó vào thư mục pub nhưng không thành công.

Cũng xóa bộ nhớ cache và tạo.

Tôi đang chạy magento2 trên máy chủ nginx


Am thanh la. Tôi đã tạo tập lệnh test.php trong thư mục gốc magento2, sau đó tôi chỉ cần gọi nó từ trình duyệt http: //%magento-base-url%/test.php và nó hoạt động.
Valery Statichnyi

Tôi đang chạy magento2 trên máy chủ nginx
Ranjit Shinde

Câu trả lời:


19

Nếu bạn đang sử dụng cấu hình nginx đi kèm với magento, bạn cần đặt một tệp trong pubthư mục để cho phép truy cập vào nó từ trình duyệt vì pub là gốc tài liệu của vhost. Magento root dir là một cấp lên. Thứ hai của tất cả các cấu hình mặc định cho nginx chỉ cho phép truy cập index.php, get.php, static.php, report.php, 404.php503.phptập tin. Bất kỳ khác không được xử lý bởi php. Bạn có thể thấy điều này phù hợp với location ~ (index|get|static|report|404|503)\.php$ {trong nginx.conf.sample. Nếu bạn không sử dụng nó, hãy kiểm tra cấu hình của bạn để biết quy tắc tương tự. Để cho phép một tệp khác có thể truy cập được từ trình duyệt, chỉ cần thêm tên khác sau 503 hoặc thay đổi toàn bộ dấu ngoặc bằnglocation ~* \.php$ {


Tôi có cần khởi động lại nginxa sau khi thay đổi?
ravisoni

Có, bất kỳ thay đổi nào đối với vhost đều yêu cầu ít nhất tải lại.
Zefiryn

Cảm ơn người đàn ông đã làm việc
Pandurang

11

Ví dụ: để lấy tên sản phẩm theo tập lệnh tùy chỉnh

Ví dụ 1:

Tạo test.phpở gốc của 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();

Bạn có thể chạy tập lệnh test.phpbằng cách

http://127.0.0.1/magento2/test.php

Ví dụ 2:

Bước 1: tạo index.php ở thư mục gốc của 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);

Bước 2: tạo 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;
    }

}

Bây giờ bạn có thể chạy tập lệnh tùy chỉnh này bằng cách

http://127.0.0.1/magento2/test/

nhập mô tả hình ảnh ở đây


1
Tôi đã gặp lỗi 'không tìm thấy tùy chỉnh lớp' vì vậy tôi đã thêm 'yêu cầu' ./customScript.php 'trước' $ app = $ bootstrap-> createApplication ('customScript'); ' và điều đó đã làm việc.
Zankar

Tôi đang gặp lỗi không tìm thấy trang
ravisoni

1
@ravisoni, điều đó có nghĩa là bạn đã làm sai điều gì đó. Đảm bảo tạo thư mục / test / và hai tệp index.php và một tệp customScript.php khác
electroid

1
@Zankar, bạn cần đặt tệp customScript.php của mình vào cùng thư mục (thư mục con từ sitedir) dưới dạng tệp index.php. Từ mã của bạn, ./customScript.phptôi có thể thấy rằng customScript.php của bạn tăng một cấp so với index.php
electroid

@electroid trong trường hợp của tôi, customScript.phptập tin nằm trong cùng thư mục với index.php. Nếu tôi đưa nó từ một thư mục lên một cấp tôi sẽ làm ../customScript.php(lưu ý hai dấu chấm)
Zankar

2

Nếu bạn muốn cho phép nhiều tập lệnh php có thể thực thi được như tôi cần (import.php cho sản phẩm nhập khẩu ERP, stock.php để cập nhật kho lưu trữ với ERP của tôi, v.v.):

  • tạo một thư mục mới scriptstrong /pubthư mục
  • chỉnh sửa magentovhost của bạn và thêm dòng dưới##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;
        }
     }

Với điều này, bây giờ bạn có thể chạy các tập lệnh của mình bằng cách truy cập chúng tại:

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

Rất hữu ích. Cảm ơn bạn.
rupi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.