我想将自定义php脚本添加到magento2根文件夹并从浏览器运行。我试图将其添加到magento2根文件夹中,但它重定向到404页面。
我也尝试将其添加到pub文件夹中,但没有成功。
还清除了缓存和生成。
我在Nginx服务器上运行magento2
我想将自定义php脚本添加到magento2根文件夹并从浏览器运行。我试图将其添加到magento2根文件夹中,但它重定向到404页面。
我也尝试将其添加到pub文件夹中,但没有成功。
还清除了缓存和生成。
我在Nginx服务器上运行magento2
Answers:
如果您使用的是magento随附的nginx配置,则您需要在pub
文件夹中放置一个文件,以允许从浏览器访问该文件,因为pub是vhost的文档根目录。Magento根目录为上一级。为nginx的所有默认配置的第二只允许访问index.php
,get.php
,static.php
,report.php
,404.php
和503.php
文件。php不处理其他任何内容。您可以location ~ (index|get|static|report|404|503)\.php$ {
在nginx.conf.sample中看到这一点。如果您不使用它,请检查您的配置中是否存在类似规则。要允许从浏览器访问另一个文件,只需在503之后添加另一个名称,或使用来更改整个方括号location ~* \.php$ {
例如,通过自定义脚本获取产品名称
范例1:
创建 test.php
在Magento的根部var/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();
您可以test.php
通过以下方式运行脚本
http://127.0.0.1/magento2/test.php
范例2:
步骤1:在magento 2的根目录下创建index.php
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);
步骤2:建立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;
}
}
现在,您可以通过以下方式运行此自定义脚本:
./customScript.php
我可以看到您的customScript.php比index.php高出一个水平
customScript.php
文件位于的目录中index.php
。如果要从上一级文件夹中添加它,我会做../customScript.php
(请注意两个点)
如果您想允许多个 php脚本像我需要的那样可执行(ERP导入产品的import.php,用我的ERP的库存更新的stock.php等):
scripts
在/pub
文件夹中创建一个新目录magento
虚拟主机并在下面添加行##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;
}
}
现在,您可以通过访问以下脚本来运行脚本:
http://www.example.com/scripts/your_custom_code.php