月度归档:2012年07月

Magento数据库设计结构概览

http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram这个文章描述了Magento数据库的设计结构的基本概念。

http://www.magereverse.com/提供了数据库结构的参考。

Magento安装完成后数据库就有300多张表,它的庞大和复杂性从这个数字中就可以体现得出来。不过它的设计追求完美和高度可扩展,比如EAV数据模型的引入就是为了追求高度可扩展,当然,追求完美和高度可扩展必定是牺牲一定性能作为前提的,所以从中可以看出,Magento是一个大型的企业级程序,开发和维护成本等,都会远远高于其它产品。

Magento数据库结构

Magento数据库结构

要看懂这个数据库设计图,以下这个说明必须先看看(设计图左上角)

Magento数据库结构说明

Magento数据库结构说明

可以看到,这个数据库设计分5大块,分别是System, Product, Customer, EAV, Sales,然后有对应的颜色。过来就是表的类型,Reference Tables [Static]就是被引用的表(一对多结构中),Reference Tables [Dynamic]就是去引用其它表的表(一对多结构中,可能不是直接引用而是间接的),Cross-Reference Tables表就是对多对多时产生的中间对应表的引用,而这个中间表就是Important Looking Tables,还有就是Entity Tables和Entity Tables[by Data type]和Other Tables,注意它标的颜色,有助快速分辨表的类型,第三列的是表的连线颜色标识(跨越块引用时,如果不跨越使用黑线),最右边的图示表示使用虚拟框的是最近新添加的表。

同时可以看到,这张数据库表结构图是2009年整的,从http://www.magereverse.com可以看到,从1.4到1.5添加了10张表,从1.5到1.6添加了11张表,移除了10张表,从1.6到1.7添加了17张表,这说明版本升级的时候,数据库结构也在优化升级和添加新功能等,不过大部分核心功能并未做改变,但是实际研究和开发的时候必须实时参考数据库结构,比如可以使用MySQL提供的MySQL Administrater。

MySQL Administrator查看Magento数据库结构

MySQL Administrator查看Magento数据库结构

可以看到admin_rule通过role_id外引用admin_role的role_id,不过那些通过程序实现的引用,这里是看不到的,不过这种引用也不是数据库设计层次的设计就是了。

实时上,http://www.magereverse.com给出的才是一个完美方案,也是官方推荐参考的。

Mgereverse结构图示例

Mgereverse结构图示例

原创文章,转载务必保留出处。
永久链接: http://blog.ifeeline.com/51.html

Magento安装基本要求

Magento对PHP环境和数据都有一定要求,从官方文档可以看到,PHP要求5.2.13以上,需要支持以下扩展:PDO_MySQL simplexml mcrypt hash GD DOM iconv curl SOAP (if Webservices API is to be used)并且关闭安全模式(PHP5.3+此特征已经丢弃)和PHP配置中Memory_limit限制不能小于256M。而MySQL要求4.1.20+并且Magento使用InnoDB存储引擎。

很多的PHP安装可能没有PDO_MySQL的支持,而很多的MySQ安装可能默认没有启动InnoDB存储引擎。可以通过官方提供的一个检查脚本来检查环境是否符合要求,可以从http://www.magentocommerce.com/knowledge-base/entry/how-do-i-know-if-my-server-is-compatible-with-magento下载此脚本,不过这个脚本中的 “preg_match(‘/[0-9]\.[0-9]+\.[0-9]+/’, shell_exec(‘mysql.exe -V’), $version);” 在我的Zend Server CE安装中并没有能够执行,所以运行后显示MySQL不符合要求,我把shell_exec(‘mysql.exe -V’) 改为了 shell_exec(‘D:\Zend\MySQL51\bin\mysql.exe -V’),这样脚本运行结果:

Magento PHP环境检测结果

Magento PHP环境检测结果

可以看到Zend Server CE安装版默认已经符合Magento的运行环境,所以我选择它来做运行环境,避免其它比较麻烦的配置。

运行环境符合安装要求后,就开始安装Magento,一般当然是要先建立数据库,不过要注意的是如果希望使用样品数据,要先把magento_sample_data_for_x.x.x.sql导入数据库,然后正常安装Magento,过程不应该有什么问题。

可能的插曲:
可能需要调整一下PHP对资源的限制问题,因为安装时会消耗大量资源,如果超过了PHP的限制将导致安装失败。
max_execution_time 最大执行时间
memory_limit 最大内存限制,不低于256,最好512以上

后台登录截图:

Magento后台登录

Magento后台登录

原创文章,转载务必保留出处。
永久链接:http://blog.ifeeline.com/47.html

PHP运行环境 – Zend Server CE安装

“Zend Server Community Edition (CE) is a free Web Application Server that is simple to install and easy to use. It is an ideal solution for anyone experimenting with PHP or running PHP applications in production where a commercial support is not needed.”

Zend Server CE是Zend推出的一个免费的PHP运行环境,内置了对ZF的支持,相当于是一键安装包,在windows下我们一般用起来快速搭建PHP运行环境,做PHP应用程序开发。

去到http://www.zend.com/en/downloads/,这里展示了Zend的全部产品,选择Zend Server CE
zend server ce

它有针对Linux和windows的版本,Linux下的是一个脚本而已,安装的时候会实时下载,而windows下的版本这是一个可执行的二进制包。

我们选择windows的php5.3的版本下载。下载的时候需要注册一下。下载完后开始安装(ZendServer-CE-php-5.3.14-5.6.0-SP2-Windows_x86.exe)。

集成了Apache 和 PHP,没有集成MySQL和phpMyAdmin[安装时如果要安装需要在线下载,如果本地已经安装了MySQL和phpMyAdmin,不需要再下载安装]。如果使用此安装包下载安装MySQL,卸载时不会卸载已经安装了的MySQL, Apache PHP和phpMyAdmin会被卸载。

安装过程:

Zend Server CE 安装 - 自定义安装

Zend Server CE 安装 – 自定义安装

Zend Server CE安装 - 选择组件

Zend Server CE安装 – 选择组件

Zend Server CE安装 - 选择组件

Zend Server CE安装 – 选择组件


勾选上phpMyAdmin和MySQL Server,这两个在安装时实时下载,也可以不勾选,安装完成后手动去安装它们。

Zend Server CE安装 - 选择安装Apache

Zend Server CE安装 – 选择安装Apache

Zend Server CE安装 - Apache监听端口

Zend Server CE安装 – Apache监听端口


Apache默认监听端口80,确保80端口未被使用,如果已经被使用,需要修改为其它端口,否则这个Apache可能无法启动。

Zend Server Interface Port是管理Zend Server的监听端口,实际是建立一个Apache虚拟主机,配置文件为Apache2/conf/zend.conf。

Zend Server CE安装 - 文件结构

Zend Server CE安装 – 文件结构

安装完成后添加了如下几项服务:
Apache2.2-Zend
MySQL_ZendServer51
Zend Deployment
Zend Job Queue
Zend Moniter
Zend Session Clustering
后三项默认是没有随系统启动的。

启动错误:

Zend Server CE启动错误

Zend Server CE启动错误

Zend Server CE 配置文件路径

Zend Server CE 配置文件路径

Zend Server CE 配置文件乱码


配置文件出现乱码,修正后重启Apache。

扩展知识 – Apache的配置

Zend Server CE Apache配置

Zend Server CE Apache配置


去掉 Include/conf/extra/httpd-vhosts.conf前的#号注释用来让其支持虚拟主机的配置。注意最后的Include conf/zend.conf。

Zend Server CE Apache 虚拟主机配置

Zend Server CE Apache 虚拟主机配置


设置一个默认虚拟主机,定位到Apache默认的存放目录。其它的虚拟主机的配置,如果也是基于域名的,只要把localhost改为域名,D:\Zend\Apache2\htdocs路径改为对应的目录,然后在host文件中添加这个域名对应到127.0.0.1,就可以通过域名访问本地站点。

接下来要看下zend.conf文件:

Zend Server CE Apache Zend 配置

Zend Server CE Apache Zend 配置


如果定义了基于主配置文件监听端口[比如80]的虚拟主机,那么Apache的主配文件中定义的默认主机将无效,而把第一个定义的虚拟主机作为默认主机[Apache的特征]。

注意指令:Alias /phpMyAdmin “D:\Zend\phpMyAdmin” 在这个位置表示全局别名记录,表示在任何一个能识别的主机地址后加入 /phpMyAdmin 就可以访问phpMyAdmin程序。

以上实际是配置一个Apache虚拟主机,用来运行Zend Server CE的管理程序,当然这个管理程序显然是基于PHP的。

本地HOST模拟DNS解析:

本地HOST模拟DNS解析

本地HOST模拟DNS解析

本地HOST文件格式

本地HOST文件格式

使用PING模拟解析本地域名

使用PING模拟解析本地域名

扩展知识 – 关于PHP配置

Zend Server CE - PHP配置文件路径

Zend Server CE – PHP配置文件路径

Zend Server CE - PHP配置文件路径

Zend Server CE – PHP配置文件路径

对应:

Zend Server CE - PHP配置文件路径

Zend Server CE – PHP配置文件路径


特别在安装Mageto这样的大型程序时,PHP的max_execution_time 和 memory_limit都需要调大,否则在安装时到达了它的限制值将导致安装失败。

扩展知识 – 关于MySQL的配置

Zend Server CE - MySQL配置文件路径

Zend Server CE – MySQL配置文件路径

Zend Server CE - MySQL配置文件

Zend Server CE – MySQL配置文件

Zend Server CE - MySQL配置文件

Zend Server CE – MySQL配置文件


如果MySQL不是通过Zend Server安装的,这些配置可能和上面的不一致,Magento默认需要使用INNODB引擎,所以需要开启,否则无法安装成功。

数据存放位置

Zend Server CE - MySQL数据存放位置

Zend Server CE – MySQL数据存放位置

MySQL的管理工具phpMyAdmin在安装时已经安装到了正确位置。注:phpMyAdmin程序包只要拷贝到能运行PHP的环境中,并且MySQL进程已经开启了,程序就能启动并管理MySQL,所以如果本地已经有这个程序,只要拷贝到合适位置即可。

另外,可以使用命令行管理工具:

MySQL命令行管理工具

MySQL命令行管理工具

扩展知识 – 关于Zend Server管理程序
Zend Server管理程序是一个基于Zend 框架的,管理PHP运行环境的程序包:

Zend Server CE - 管理程序GUI

Zend Server CE – 管理程序GUI

查看一下index.php文件:

Zend Server CE GUI 首页源码

Zend Server CE GUI 首页源码

Zend_Controller_Front是Zend框架中的一个前端控制器类。很显然,它是一个基于Zend Framework的PHP程序,用来管理Zend Server CE。

原创文章,转载务必保留出处。
永久链接:http://blog.ifeeline.com/11.html

Zen-Cart 1.5 安装时错误解决办法

Zen-Cart 1.5安装到创建数据库时出现:
WARNING: An Error occurred, please refresh the page and try again.

查看cache目录下生成的日志,发现:PHP Fatal error: 1101:BLOB/TEXT column ‘page_parameters’ can’t have a default value :: CREATE TABLE admin_activity_log ( ….

创建admin_activity_log表时page_parameters列不能具有一个默认值

两种办法:
1 直接修改这里提示的SQL语句,不过其它地方还可能存在相同的问题。
2 修改Mysql的配置文件

事实上之所以出现这样的问题,是因为Mysql配置中sql-mode=”STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION”, STRICT_TRANS_TABLES设置了SQL模式为严格模式。 把STRICT_TRANS_TABLES去掉重启Mysql,错误解除,成功安装。

永久链接:http://blog.ifeeline.com/8.html