网站首页 / 资讯 / Magento文档

Magento2开发教程NO5-配置指南汇总-缓存-安全设置-命令行配置等(上篇)

作者:admin

一 介绍

您可以用下列任何一种方式配置Magento2:
@通用配置
使用 命令行工具 (例如,关闭或者开启缓存, 更新索引, 等等)
手动设置 引导参数

@缓存(缓存)
设置 Varnish
设置 缓存
使用 Redis 在 Magento 2 页面 和 默认缓存
使用 Redis 在 session 存储
设置数据库缓存
@Session 存储
Redis
如何定位session文件

二 安全设置

@cron.php 安全
cron(定时任务)概述
Magento 2 的定时任务(cron job), 可以 reindexing(刷新索引), 生成 e-mails, 生成 newsletters, 生成 sitemaps, 等等. cron 是magento 2 配置的一个重要组成部分。

你可以通过以下方式运行Magento 2 cron:
在命令行或者crontab上使用 magento cron:run 命令。
在浏览器上运行 /pub/cron.php?[group=]

要注意pub/cron.php的安全性,防止它被恶意利用攻击网站 . 如果corn不安全,任何用户都可以运行cron来攻击你的Magento 2网站。

如果你使用magento cron:run 命令运行cron就不用担心安全问题。因为命令行执行corn是一个安全的进程.

@X-Frame-Options 响应头
为了防止点击劫持(clickjacking )漏洞,在访问magento 2的时候增加了一个X-Frame-Options HTTP请求头
X-Frame-Options有一下三种:
DENY: 页面不能显示在frame中.
SAMEORIGIN: (magento 2 的默认设置)
ALLOW-FROM : 页面只能在指定的origin上显示
出于安全原因,Magento 2的强烈建议不要在frame中运行magento 2 页面.

@防止缓存投毒
本主题讨论如何防止缓存投毒如果你使用的是IIS服务器. Cache poisoning(缓存投毒) 是更改缓存内容以将同一站点包含不同页面的方法.例如,有可能注入一个HTTP 404(未找到)错误页面代替一些正常页面(例如,店面首页)等等

三,Magento 2 初始化和引导

@bootstrapping 概述
运行magento 2, 以下代码在index.php中执行:
引入 /app/bootstrap.php 执行必要的初始化例程,如错误处理,初始化自动加载,设置配置选项,设置默认时区,等等。
创建一个实例 \Magento\Framework\App\Bootstrap.
创建一个Magento 2 的应用实例 (\Magento\Framework\AppInterface).
运行Magento 2

@Bootstrap 运行逻辑
bootstrap 安装下面的流程运行 magento2:
1,初始化错误处理程序。
2,创建对象管理器(/Magento/Framework/ObjectManager)和基本共享服务,这些服务在任何地方都使用,并且受环境的影响。环境参数被正确地注入到这些对象。
3,判断mode是否启用
4,判断Magento2是否安装

5,启动Magento2.
任何未捕获的异常在应用程序启动后自动传回Magento 2 的 catchException() 方法,catchException方法用来处理异常. 后返回 true 或者 false:
如果反回 true: Magento处理异常成功。不需要做其他事情.
如果反回 false (或任何其他结果):bootstrap 执行默认异常处理子程序.
6,发送应用程序对象提供的响应。

修改 bootstrap 代码示例:

use Magento\Framework\App\Bootstrap; 
require __DIR__ . '/app/bootstrap.php';
 $params = $_SERVER;
  $params[Bootstrap::PARAM_REQUIRE_MAINTENANCE] = true; 
  // default false
   $params[Bootstrap::PARAM_REQUIRE_IS_INSTALLED] = false; 
   // default true 
   $bootstrap = Bootstrap::create(BP, $params);
    /** @var \Magento\Framework\App\Http 
    $app 
    */ 
    $app = $bootstrap->createApplication('Magento\Framework\App\Http'); 
    $bootstrap->run($app);

@设置引导参数
下表列出了可以设置的引导(bootstrap)参数:
MAGE_DIRS 指定自定义目录和URL路径
MAGE_PROFILER 启用dependency graphs和HTML profiling

不是所有的引导参数都记录在这里。
可以使用 magento deploy:mode:set {mode} 命令对Magento2模式(mode)设置 (developer, default, production).

@Magento2模式(mode)s介绍

你可以运行Magento下列modes:

Mode 名称描述
default(默认)不改变magento 2 的任何设置,默认设置对优化不够好。

Magento 2应用部署多个服务器可以得到优化。

  • 静态文件发布到pub/static 目录

  • 将异常写入日志文件,不显示给用户。

  • 隐藏自定义 X-Magento-* HTTP请求和响应头

Developer(开发模式)这个 mode 仅用于开发 :
  • 静态文件发布到pub/static 目录

  • 提供详细的 logging

  • 使用自动代码编译

  • 可以增强调试

  • 显示自定义 X-Magento-* HTTP请求和响应头

production(运行环境)用于部署在生产系统上。异常不显示给用户,异常仅写入日志

@Magento2基础目录路径介绍
MAGE_DIRS您能够指定使用的自定义基目录路径和基本URLURLs.
设置 MAGE_DIRS
Magento/Framework/App/Filesystem/DirectoryList.php中指定一个关联数组,其中键是常量,值是目录或URL路径的绝对路径。
你可以用以下任何一种方式设置 MAGE_DIRS :
设置引导参数
使用自定义入口代码:

use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\Bootstrap;   require __DIR__ . '/app/bootstrap.php'; $params = $_SERVER; $params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [ DirectoryList::CACHE => [DirectoryList::PATH => '/mnt/nfs/cache'], DirectoryList::MEDIA => [DirectoryList::PATH => '/mnt/nfs/media', DirectoryList::URL_PATH => ''],]; $params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [ DirectoryList::PUB => [DirectoryList::URL_PATH => ''], DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'], DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'], DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],]; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params); /** @var \Magento\Framework\App\Http $app */ $app = $bootstrap->createApplication('Magento\Framework\App\Http'); $bootstrap->run($app);
上面的代码分别设置了 [cache] 、 [media] 、 /mnt/nfs/cache 、 /mnt/nfs/media路径.

@magento 2 使用性能(MAGE_PROFILER)介绍
使用内置分析器(built-in profiler).
你可以使用Magento 2 内置分析器(built-in profiler)来执行任务,如性能分析。分析的本质取决于你使用的分析工具。支持多种格式,包括HTML。)
Magento提供的基础功能 Magento\Framework\Profiler

设置 MAGE_PROFILERMAGE_PROFILER 支持以下值:
1 启用特定的profiler输出.
还可以使用下列方法启用特定的探查器
firebug它使用 Magento\Framework\Profiler\Driver\Standard\Output\Firebug
csvfile 它使用 Magento\Framework\Profiler\Driver\Standard\Output\Csvfile
其他值使用 Magento\Framework\Profiler\Driver\Standard\Output\Html

2 启用依赖图.
依赖图通常显示在页面的底部。下图显示输出的一部分 :

三 命令行配置

@Magento 2的命令行接口(CLI)设置 /bin/magento. 提供一个命令行安装和配置界面。包含以下功能:  安装Magento 2(相关的任务,如创建或更新数据库架构创建部署配置,等等) 清除缓存 管理索引, 包括更新索引 创建翻译词典和翻译语言包  生成类,如插件拦截器,生成对象管理器的依赖注入配置 部署静态视图文件 创建较小的css文件 其他功能: (/bin/magento list)  可以列出所有可用的安装和配置命令 基于 Symfony 的一致用户接口 CLI是可扩展的,所以第三方开发者可以扩展开发。 不显示禁用模块的命令 .

@启动命令管理
命令总结:

magento setup:cache:{enable|disable|clean|flush|status}管理缓存
magento setup:indexer:{status|show-mode|set-mode|reindex|info}管理索引
magento cron:run运行magento 2 定时任务
magento setup:di:compile编译所有不存在的代理和工厂;并预编译一个商店和网站的类定义、继承信息和插件定义。
magento info:dependencies:{show-modules|show-modules-circular|show-framework}e模块的依赖关系,循环依赖和Magento 2框架依赖
magento i18n:{collect-phrases|pack}创建翻译词典或翻译包
magento setup:static-content:deploy部署静态视图文件
magento dev:tests:run运行测试
magento dev:xml:convert更新你的XML布局文件来匹配新的可扩展样式表语言转换(XSLT)样式表
magento setup:perf:generate-fixtures生成用于性能测试的数据。
magento sampledata:install安装magento 2测试数据.

关于magento测试数据查看 magento测试数据.

在magento2中我们经常会用到php bin/magento 命令:参数 来完成一些操作,所以就对命令做了一个总结

php对应的是E:\xampp\php\php.exe或/opt/lampp/bin/php, 可在系统里加入全局变量:
Windows:我的电脑>属性>高级系统设置>高级>环境变量>添加
Linux:在/etc/profile(所有用户)或则~/.bash_profile里加入如下语句:
PATH=$PATH:/opt/lampp/bin

bin/magento对应网站根目录下的bin/magento或bin\magento, 如E:\xampp\htdocs\gt-store-v1\bin\magento

//查看所有命令列表magento –list或magento list, 标准示范, 下面简写
Windows:
php.exe E:\xampp\htdocs\gt-store-v1\bin\magento list或E:\xampp\php\php.exe E:\xampp\htdocs\gt-store-v1\bin\magento list
Linux:
php /opt/lampp/htdocs/gt-store-v1/bin/magento list

要获取特定命令的帮助,请输入 :
magento –help <command>
例如:
magento –help setup:install
magento –help cache:enable

//模块moudule管理
1、moudule:status    查看所有module的状态
2、moudule:disable Test_Hello(module的名称) 禁用此module
3、moudule:enable Test_Hello(module的名称)  启用此module
4、module:install

//安装setup管理
1、setup:upgrade  更新数据
2、setup:static-content:deploy 部署magento的静态内容
3、setup:cron:run   执行cron

//索引indexer管理
1、indexer:status      索引的状态
2、indexer:reindex     刷新索引
3、indexer:reset        重置索引

//缓存cache管理
1、cache:status    缓存状态
2、cache:clean      清空缓存
3、cache:flush      刷新缓存
4、cache:enable    开启缓存
5、cache:disable    关闭缓存

要查看缓存的状态,请输入
magento cache:status
输出结果:
config: 1
layout: 1
block_html: 1
collections: 1
db_ddl: 1
eav: 1
full_page: 1
translate: 1
config_integration: 1
config_integration_api: 1
config_webservice: 1

缓存类型概述

缓存类型”friendly”名称缓存类型标识代码描述
ConfigurationconfigMagento2收集配置所有的模块,将它合并,节省了合并结果的缓存。该缓存还包含存储在文件系统和数据库中的特定存储设置。

修改配置文件后,清除或刷新此缓存类型.

Layoutlayout已编译的页面布局(即所有组件的布局组件)。

修改布局文件后,清除或刷新此缓存类型.

Block HTML outputblock_htmlHTML 页面或者 block.

修改视图层后,清除或刷新缓存类型。

Collections datacollections数据库查询结果.
DDLdb_ddl数据库 schema.

自动更新数据库模式的一种方法是使用 magento setup:db-schema:upgrade 命令.

Entity attribute value (EAV)eav以EAV属性相关的元数据(例如,存储标签,链接到相关的PHP代码,属性渲染,搜索设置,等等)。
Page cachefull_page生成的HTML页面.
Reflectionreflection删除的WebAPI模块和客户模块之间的依赖关系。
Translationstranslate从所有模块合并翻译.
Integration configurationconfig_integration编译的集成。

更改或添加Integration后清除或刷新此缓存。

Integration API configurationconfig_integration_api编译集成的API.
Web services configurationconfig_webserviceWeb API 结构.

@配置和运行cron(定时任务)
cron(定时任务)概述
Magento 2 有许多功能需要用到cron(定时任务),例如下面这些功能:
.Catalog price rules(分类价格规则)
.Newsletters(通讯邮件)
.Generating(生成) Google sitemaps
.客户提醒/通知(产品价格变化,产品库存)
.刷新索引
.汇率自动更新
.Magento 2 所有的电子邮件(包括所有的交易和订单确认)
我们建议您运行的cron为Magento 2文件系统所有者. 而不是root用户。

1,从命令行运行cron
命令选项:
magento cron:run [–group=”<cron group name>”]
2,在后台运行cron
Magento 2文件系统所有者运行cron
创建cron(定时任务)
crontab -u magento_user -e

@代码编译
代码编译由以下顺序组成:
.应用程序代码生成(工厂、代理等)
.区域配置聚合(即每个区域的优化依赖注入配置)
.拦截器生成(即拦截器的优化代码生成)
.拦截缓存生成
.库代码生成(即API生成代码)
.服务数据属性生成(即为数据对象生成的扩展类)
你可以在\Magento\Setup\Module\Di\App\Task\Operation.找到类代码编译

@Magento 2 模式(mode)设置

为了提高安全性和易用性, magento 2 提供了一个转换 Magento 2 模式的命令.

查看 magento 2 的所有权和权限在开发模式和生产模式中.

当才开发模式改变成生产模式是清除下列目录的内容:

var/cache var/di var/generation var/view_preprocessed pub/static

Exceptions:

命令的用法:

magento deploy:mode:show

类似下列显示的消息:

Current application mode: developer.

更改模式

magento deploy:mode:set {mode} [-s|--skip-compilation]

例子如下.

更改为 production mode(生产模式)

magento deploy:mode:set production

@Magento 2依赖报告(Dependency reports)概述
Magento 2依赖报告(Dependency reports)分为以下三种
模块依赖(模块依赖): 显示模块之间的依赖关系总数以及依赖项是否硬或软
Circular dependencies(循环依赖):显示依赖链的总数和每个模块的循环依赖的数量和列表
Framework dependencies(框架依赖):Magento框架模块

@翻译和语言包

Magento 2的翻译,使您可以自定义多语言和多店面。通过翻译词典更容易更新和维护,降低代码的耦合和重复量。

如何生成翻译文件(语言包):

生成一个翻译词典

您可以生成一个用于自身使用的翻译字典(例如,在自定义模块中翻译单词或短语)或使用语言包。见以下部分之一:

翻译字典怎样工作

要翻译单词和短语,你必须 :

  1. 运行命令来启用可翻译单词和短语的组件

  2. 翻译单词和词组。

命令选项:

magento i18n:collect-phrases [-o|--output="<csv文件路径和名称>"] [-m|--magento] <要翻译的目录路径>

创建语言包

更多关于语言包.

本节讨论如何创建一个语言包,该软件包将 CSV 文件写入模块和主题:

  1. 收集和翻译单词和短语.

  2. 运行语言包命令.

  3. 创建目录和文件.

  4. (Optional.) 配置多语言包.

运行语言包命令

命令的用法:

magento i18n:pack [-m|--mode={merge|replace}] [-d|--allow-duplicates] <source> <locale>

创建目录和文件

一个语言包目录(app/i18n/<VendorName>)下的Magento 2文件系统具有下列内容:

整个路径必须全部小写.

创建这些文件:

  1. app/i18n下创建一个目录.例如,Magento的语言包都位于 app/i18n/magento

  2. 添加任何您需要的许可证文件 .

  3. 添加 composer.json 指定语言包的依赖项。

  4. 注册语言包在 registration.php

  5. 添加 language.xml 元信息文件在下一节中讨论.

语言包 language.xml

当声明一个语言包在language.xml配置文件,您必须指定此包的继承关系。

语言继承使您能够创建一个新的翻译基于现有的一个子类翻译重写父类。但是,如果子翻译未能加载载或显示,则使用父。如果某些子翻译缺少短语或单词,则该短语或单词取自父。 语言包继承的例子.

要声明包,请指定以下信息:


<?xml version="1.0"?> <language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">     <code>en_GB</code>     <vendor>magento</vendor>     <package>en_gb</package>     <sort_order>100</sort_order>     <use vendor="oxford-university" package="en_us"/> </language>


如果需要,可以指定几个父包。

语言包继承的例子

假设一个语言包来自另外两个包,而这些包也有父和“祖父母”包.

如果一个语言包来自两个包,它的language.xml 可能看起来像下面 :


<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">     <code>en_GB</code>     <vendor>magento</vendor>     <package>language_pack</package>     <sort_order>100</sort_order>     <use vendor="parent-package-one" package="language_package_one"/>     <use vendor= "parent-package-two" package="language_package_two"/> </language>


使用翻译命令的例子

示例:为模块或主题创建翻译字典
  1. 从你的模块收集短语 :

    magento i18n:collect-phrases -o "/var/www/html/magento2/app/code/ExampleCorp/SampleModule/i18n/xx_YY.csv" /var/www/html/magento2/app/code/ExampleCorp/SampleModule


示例:创建语言包
  1. magento i18n:collect-phrases -o "/var/www/html/magento2/xx_YY.csv" -m


  2. magento i18n:pack /var/www/html/magento2/xx_YY.csv -d xx_YY


  3. 为语言包创建目录。 /var/www/html/magento2/app/i18n/ExampleCorp/xx_yy


    • composer.json (sample following)

    • registration.php (sample following)

    • language.xml (sample following)

示例composer.json:


{     "name": "examplecorp/language-xx_yy",     "description": "Sample language",     "version": "100.0.2",     "license": [         "OSL-3.0",         "AFL-3.0"     ],     "require": {         "magento/framework": "100.0.*"     },     "type": "magento2-language",     "autoload": {         "files": [             "registration.php"         ]     } }


示例 registration.php:


/**  * Copyright © 2015 Magento. All rights reserved.  * See COPYING.txt for license details.  */ \Magento\Framework\Component\ComponentRegistrar::register(     \Magento\Framework\Component\ComponentRegistrar::LANGUAGE,     'magento_xx_yy',     __DIR__ );


示例 language.xml:


<?xml version="1.0"?> <!-- /**  * Copyright © 2015 Magento. All rights reserved.  * See COPYING.txt for license details.  */ --> <language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/Language/package.xsd">     <code>xx_YY</code>     <vendor>examplecorp</vendor>     <package>xx_yy</package> </language>


@部署静态视图文件
静态视图文件部署概述
静态视图文件部署命令使您可以编写静态文件到Magento 2文件系统 当Magento 2 设置为生产模式时.
“静态视图文件”是指以下内容:
“静态”意味着它可以缓存一个站点(也就是说,文件不是动态生成的)。包括图像和较小的CSS。
“视图”是表示层(从MVC).
静态视图文件位于 /pub/static 目录, 和一些被缓存在 /var/view_preprocessed 目录.

部署静态视图文件:
删除内容 /pub/static.
运行静态视图文件部署工具 /bin/magento setup:static-content:deploy.
命令选项:
magento setup:static-content:deploy [] [-t|–theme[=””]]  [–exclude-theme[=””]] [-l|–language[=””]] [–exclude-language[=””]]  [-a|–area[=”
“]] [–exclude-area[=”
“]] [-j|–jobs[=””]] [–no-javascript] [–no-css] [–no-less] [–no-images]  [–no-fonts] [–no-html] [–no-misc] [–no-html-minify] [-d|–dry-run]

@运行单元测试
先决条件
在运行单元测试命令之前,必须满足下列条件:
Magento_Developer 模块必须启用. 启用命令:
magento module:enable [–force] Magento_Developer

必须设置您的系统来运行所需的测试.
例如,运行集成测试, 需要复制 dev/tests/integration/etc/install-config-mysql.php.dist 到  dev/tests/integration/etc/install-config-mysql.php并修改它以适应您的环境.

运行测试
命令的用法:
magento dev:tests:run
magento dev:tests:run –help
all, unit, integration, integration-all, static, static-all, integrity, legacy, default
magento dev:tests:run integration

@转换layout(布局) XML 文件
此命令允许你更新的XML布局文件

有关layout(布局)xml文件的更多信息,请参见:
布局(Layout)说明
布局(Layout)文件类型

转换layout(布局) XML 文件
命令选项:
magento dev:xml:convert [-o|–overwrite] {xml file} {xslt stylesheet}

{xml file} 要转换的布局XML文件的完整路径和文件名(必填)
{xslt stylesheet} 是用于转换的完整路径和XSLT样式表文件的文件名(必须)
-o|–overwrite 覆盖现有的xml文件

@性能测试数据概述
使用Magento性能工具包或其他工具进行性能测试,你必定产生大量的数据(例如,存储,分类,产品,等等)。
您可以调整您创建的数据量,使用profiles(配置)(小,中,大,特大)。
配置文件位于 /setup/performance-toolkit/profiles/
例如, /var/www/html/magento2/setup/performance-toolkit/profiles/ce

运行数据生成器
按本节讨论的命令运行。命令运行后,重建索引.
命令选项:
magento setup:perf:generate-fixtures {配置文件绝对路径路径和名称}
例如:
magento setup:perf:generate-fixtures /var/www/html/magento2/setup/performance-toolkit/profiles/ce/small.xml

四,Magento2配置文件
@Magento 2的部署配置由你的模块的安装及环境配置:
<Magento安装目录>/app/etc/config.php, 其中包含已安装的模块、主题和语言包的列表
<Magento安装目录>/app/etc/env.php, 其中包含环境设置,如:
数据库连接设置
缓存存储设置
启用的缓存类型
您的加密密钥
网络路由参数(基URL,Magento管理URI)
文件系统路径

config.php 和 env.php 被称为Magento 2的 部署配置 因为他们安装期间创建和启动Magento 2所需的配置。

@管理已安装的模块
config.php 列出您已安装的组件(模块、主题和语言包)。Magento提供了命令行和基于Web的工具来管理组件(安装,卸载,启用,禁用,或升级)。
例如:
卸载组件: bin/magento setup:uninstall
启用或禁用组件: bin/magento module:enable, bin/magento module:disable.

@Module(模块)配置文件
Magento 2 Module(模块)配置文件概述

Magento 1.x版本的config.xml配置文件的任务现在分成几个文件,分布在各个模块的目录。Magento 2的多个配置文件的负载需求只有当模块请求一个特定的配置类型。

您可以使用这些文件,来自定义模块的特定功能。

多个模块可以声明同一文件

以下是本主题中常用的术语:

配置加载和合并

本节讨论如何配置和加载配置文件。

Magento 2 如何加载配置文件

Magento 2按照以下顺序加载配置文件(所有的路径都是相对于你的Magento 2安装目录):

配置文件合并

在配置文件中的节点进行合并的基础上完全合格的XPath,它有一个特殊的属性$idAttributes宣称它的标识符定义数组。对于同一父节点下嵌套的所有节点,此标识符必须唯一。

Magento 2的合并方法如下:

配置文件合并后,生成的文档包含原始文件中的所有节点。

配置类型、对象和接口

下面提供部分的有关配置类型及其相应的配置对象和可用于对象的接口的信息:

配置类型和对象
Configuration fileDescriptionStageConfiguration object
config.phpenv.php部署配置Loads into memory when Magento initializesHas no object, cannot be customized
config.xmlSystem configurationprimary, global\Magento\Framework\App\Config
di.xml依赖注入configurationprimary, global, area\Magento\Framework\ObjectManager\Config
events.xmlEvent/observer configurationglobal, area\Magento\Framework\Event
routes.xmlRoute configurationareaMagento\Framework\App\Route\Config
配置接口

您可以使用配置接口下的配置文件Magento\Framework\Config. 如果创建新的配置类型,也可以使用这些接口。

Magento\Framework\Config 提供以下接口:

@创建或扩展配置类型
若要扩展现有的配置类型,只需在模块中创建配置文件。
例如,添加一个事件的观察者,你创建的应用程序/ etc / events.xml,宣告了一个新的观察。
若要创建新的配置类型,必须添加 新限制:
XML configuration files
XSD validation schema
A loader

标签: Magento2开发
上一篇:Magento2开发教程NO4-如何创建一个主题Theme
下一篇:Magento2开发教程NO5-配置指南汇总-缓存-安全设置-命令行配置等(下篇)

相关内容

最近更新
相关产品
综合服务邮箱: magento2#foxmail.com