月度归档 2015年9月30日

通过清心醉

随便写写-团队合作

在团队建设中,把对着干的删除,把跟着干的培养,给帮着干的分钱,领着干的分红!这是规律,也是法则!你在哪个位置由你自己决定…许多人有个误区:总以为挤垮了谁,超越了谁,整死了谁,你就成功了。
事实上,一个真正的强者,不是看他摆平了多少人,而要看他帮助了多少人,成就了多少人,凝聚了多少人。未来一定不会属于一群面目狰狞、尔虞我诈的人,而是属于一群善良、共享、快乐、懂爱、会爱的人。

通过清心醉

opencart去除父级URL

opencart去除父级URL,看标题就知道是为了SEO而优化。如果不去除,就会出现重复的页面。

打开/catalog/controller/common/seo_url.php文件

找到$url .= ‘/’ . $query->row[‘keyword’];

替换成$url = ‘/’ . $query->row[‘keyword’];

细心点你会发现少了一个字符串连接符“.”;

通过清心醉

主流的电子商城B2B-B2C-C2C-O2O等等-你理解有多少

电子商城是现代的网络主流,可能完整理清它们的差别的人又有多少?在此之前作者来一一介绍它们的特性:
首先是B2B:如果要说B2B,阿里巴巴就是一个很成熟的类型。
B2B的面向对象群为场家/企业。假设某手机厂家进行B2B的模式网络营销,而某数字产品销售企业进行选购贩卖,这就是一个B2B的流水线。

其次是B2C:要说B2C,如果接触过外贸行业的人,对这个肯定不陌生,针对外贸网站,9成以上是B2C的产品,都是个人或公司针对所有用户群体为主。完整的B2C模式可以参考作者的我的电子商城;B2C就是个人(小企业/场家)建设电子商城,然后进行网络营销,针对的用户群体一般为个人为主

再来是C2C:C2C其实就是消费者对消费者,比如说我在网站卖东西,我其实就算是消费者之一,但来购买我东西的人也是消费者,所以就为消费者对消费者群体,没有企业及公司的需求。国内淘宝就是一个最成功的案例。

最后就是新崛起的O2O:O2O是一种线上购买,线下商家进行发货处理的一种交易模式,涉及的群体广泛面对为本地用户为主。

其实一切的核心,都要基以B2C为准则派生出来的,为什么这么说呢?
首先是交易过程,B2C的个人建设商城,然后进行产品销售,给予用户购买。
派生出B2B:企业级的要求比较高,如果对方不是企业或者厂家,根本就谈不上服务企业;
派生出的C2C:因为一个人就要一个网站进行交易,如果多个人就要多个网站,因此派生出了一个站点多个用户进行交易的C2C模式。
派生出的O2O:在这说明下,O2O无非就是对C2C进行一个升级,但主流的O2O平台仍然是商店面向消费者,完整的O2O的模式其实是电子商城延伸多个商家(C2C的模式),然后继承B2C的交易方式,最终由商家进行线下发货。

作者架构过B2B,C2C,B2C,O2O网站模式,也曾参考过国内外中大型企业的。发现其实都是B2C的一种,没错,B2C仍然是最大的电子商城建设方案,谁都离不开它。

然后是运营成本:
B2C*5=O2O=C2C=B2B/2

没错,C2C-O2O,其实如果是真实的环境,使用成本是一样的,为什么呢?因为这些模式都是存在多用户的平台,可最后面B2B却要除2,意思就是一个完整的B2B比C2C和O2O多一倍,居然都是多用户的操作,差的是哪里呢?

在这里,你先要知道LANMP(Linux+Apache+Nginx+Mysql+Php)的系统环境。
系统环境配置来说,这是一个费用,B2B一般都是多域名制,这就需要精通LANMP环境的配置,否则就是做废
其次就是现在一直被忽略的关键字-SEO。(基于核心技术,作者不完整写出,只写需求)
国内已经进入“微商”的时代,全民走向微化,搜索引擎的优化已经开始没人去在意了。可SEO,永远是一个网站“扬名”的关键。
无奈好多人根本就不知道SEO,永远都看好开发的网站好看就是好的。用户多才是好的,一个网站没用户,什么都是假的。可用户都是怎么来的,微分享可能带来一部分,可是如果走向国内时常,就少不了SEO的支撑,包括强大的想走入世界外贸化(小米不就是一个案例,国内走向世界外贸化),虽然广告都是用钱砸出来的。但是人家是高投资。而SEO是用时间换取真实想找到数据的用户。

B2B有很多个用户,产品数量自然多,而且独立的域名需要进行SEO的自然优化,这样每一个站点都会消耗一定的资金。

然后,SEO自然也是B2C的标准,而B2B-C2C-O2O都是B2C的派生版,又怎么可能少了SEO了呢?

那么多的版本,那么多的用户群体,你又能很清楚的知道你的需求吗?

通过清心醉

opencart导入分类扩展的代码思路

作者封装的OPENCART导入其他网站的分类的信息,需要提供PDO的连接参数和导入的7个数据参数.

class Category_PHP
{
public $pdo; //私有数据成员PDO连接
private $dbname;
private $user;
private $password;
private $pre;

/**
* 构造方法获取PDO的连接参数
* @return PDO
*/
function __construct()
{
#################
#参数初始化开始
##################
$this->pre=’mmc_’;
$this->dbname=’opencart’;
$this->user=’root’;
$this->password=”;
#################
#参数初始化结束
##################
$pdo=new PDO (“mysql:host=localhost;dbname=$this->dbname;charset=utf8”,$this->user,$this->password);
return $this->pdo=$pdo;
}

/**
* 表前缀组合,返回一个数据表名称
* @param unknown $table
* @return string
*/
protected function table($table)
{
return “$this->pre”.”$table”;
}

/**
* 写入数据库分类表  根分类
* @param unknown $data
*/
protected function insert_opencart_calss($data=array())
{
/**
* 以下7个参数为必填项,比如url可以自己重新组合
*/
$id=$data[‘1’];  //分类的ID
$mixid=$data[‘2’];  //分类的上级ID
$name=$data[‘3’]; //名称
$description=$data[‘4’]; //元描述
$keywords=$data[‘5’]; //关键字组合
$title=$data[‘6’]; //元标题
$url=$data[‘7’]; //伪静态的URL

$time=date(“Y-m-d H:i:s”);
$this->category($id,$time,$time);
$this->category_path($id,$mixid); //写入目录扩展
$this->category_url($id, $url); //写入重写URL
$this->category_description($id, $name, $description, $keywords, $title); //写入产品的详细信息
$this->category_to_layout($id); //写入分类的布局
$this->category_to_store($id); //写入分类的店铺

}

#########################################################################################
#    写入分类的其他扩展开始(不管根分类还是子分类)
#########################################################################################
/**
* 写入category_description分类详细扩展
* 需要分类ID,分类名称,分类描述(分类元描述)
* @param unknown $id
* @param unknown $name
* @param unknown $description
* @param unknown $keywords
* @param unknown $title
*/
protected function category($id,$time,$time)
{
$table=$this->table(‘category’); //获取分类数据表
$sql=”INSERT INTO $table (`category_id`, `parent_id`, `top`, `column`, `sort_order`, `status`, `date_added`, `date_modified`)
VALUES (‘$id’, ‘0’, ‘1’, ‘1’, ‘1’, ‘1’, ‘$time’,’$time’)”;
$this->pdo->exec($sql);
}

protected function category_description($id,$name,$description,$keywords,$title)
{
$table=$this->table(‘category_description’);
$sql=”INSERT INTO $table(`category_id`,`language_id`,`name`,`description`,`meta_title`,`meta_keyword`,`meta_description`)
VALUES(‘$id’,’1′,’$name’,’$description’,’$title’,’$keywords’,’$description’)”;
$this->pdo->exec($sql);
}
/**
* 写入category_path目录数据表扩展
* @param unknown $id
* @param unknown $pathid
*/
protected function category_path($id=0,$pathid=0)
{
$table=$this->table(‘category_path’);
if ($pathid==0) //如果父ID==0
{
$sql=”INSERT INTO $table(`category_id`,`path_id`,`level`)VALUES(‘$id’,’$id’,’0′)”;
}
else
{
$sql=”INSERT INTO $table(`category_id`,`path_id`,`level`)VALUES(‘$id’,’$pathid’,’0′)”;
}
$this->pdo->exec($sql);
}
/**
* 重写分类的URL格式
* @param unknown $id
* @param unknown $url
*/
protected function category_url($id,$url)
{
$table=$this->table(‘url_alias’);
$urlid=”category_id=”.”$id”; //分类的ID
$sql=”INSERT INTO $table(`query`,`keyword`,`language_id`)VALUES(‘$urlid’,’$url’,’1′)”;
$this->pdo->exec($sql);
}

/**
* 写入分类的布局
* @param unknown $id
*/
protected function category_to_layout($id)
{
$table=$this->table(‘category_to_layout’);
$sql=”INSERT INTO $table(`category_id`,`store_id`,`layout_id`)VALUES(‘$id’,’0′,’0′)”;
$this->pdo->exec($sql);
}
/**
* 写入分类对应的店铺
* @param unknown $id
*/
protected function category_to_store($id)
{
$table=$this->table(‘category_to_store’);
$sql=”INSERT INTO $table(`category_id`,`store_id`)VALUES(‘$id’,’0′)”;
$this->pdo->exec($sql);
}
#########################################################################################
#    写入分类的其他扩展结束(不管根分类还是子分类)
#########################################################################################
}

通过清心醉

PHP使用PDO连接ACCESS

上文说了使用php_com_dotnet.dll扩展来操作ACCESS数据库,但PHP默认已经不使用该方法了,而是基本统一使用了PDO的连接模式.

上一段代码,用于显示所有的admin_users管理员信息:

<?php

$db = new PDO(“odbc:driver={microsoft access driver (*.mdb)};dbq=”.realpath(“data.mdb”))or die(“连接出错”);  //连接参数
$data = $db->query(‘select * from admin_users’);
print_r($data->fetchAll());

?>

如果出现:Uncaught exception ‘PDOException’ with message ‘could not find driver’ in

那是因为PDO模式虽然是PHP推荐使用的,而PDO可以操作10多种数据库,官网没有全部打开

修改PHP.ini

;extension=php_pdo_odbc.dll

修改为:
extension=php_pdo_odbc.dll

小提示:在这里有很多php_pdo_xxx.dll扩展,其实就是PDO对那些数据库的支持

通过清心醉

Fatal error: Class ‘COM’ not found

今天在Windows平台用PHP调用ACCESS数据库,结果出现了Fatal error: Class ‘COM’ not found错误,很明显就是COM的类不存在的关系

可以查看下php/etx目录中是否存在php_com_dotnet.dll文件

如果存在的话,在php.ini里加入
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll

然后重启PHP即可.

问题的原因是:在PHP5.4之前默认是已经存在的,在5.4之后的版本已经脱离.也许因为PDO的连接已经存在,所以使用PDO的模式了.

通过清心醉

密码保护:php调用微信公众号关注用户

这是一篇受密码保护的文章,您需要提供访问密码:

通过清心醉

ecshop Access is denied

ecshop重新安装之后,配置邮件服务器时,提示”ecshop Access is denied”,一开始以为端口被封了,又不想给服务器安装TELNET来测试连接.经过一番的测试,发现是SELINUX的安全机制的影响.

关闭SELINUX服务即可:

vi /etc/selinux/config

#SELINUX=enforcing修改为SELINUX=disabled

然后reboot即可.

通过清心醉

PHP直接二次开发和插件方式

有时侯我们对于PHP的功能需要进行增加,如果是针对知名的PHP程序,很多人会选择使用插件,当然部分需要购买的有人会选择对核心代码的二次开发,那么问题来了。PHP直接二次开发和做成PHP的插件,各有什么优势?

首先说说插件类型:写插件必须熟悉当前PHP程序的接口使用规则。就开发难度来说是一样的,但要熟悉当前程序的接口就需要一定的时间量。写好的插件会有个后台管理,就比如说网银支付,可以把用户的网银信息写入MYSQL,这样可以方便用户的修改。属于傻瓜式的操作。

还有一种是直接的二次开发,一样假设是对网银支付的开发,用户的网银信息配置是写在PHP文件里,这样有什么好处?程序在执行的时候无需操作MYSQL,做WEB开发的都知道,如果频繁的连接MYSQL,数据量大了之后,会导致MYSQL缓慢,这个问题一直是PHP开发人员都顾及的。

如果数据量不大,操作人员不懂WEB,可以使用做成插件类型。否则的话,建议使用直接二次开发源代码类型。

 

通过清心醉

随便写写,抒发抒发

我喜欢打开DISCO舞曲,把节奏和声音调到最大,用震动的喧哗声来震慑自己。更喜欢跑舞池的正中央,放纵的让自己迷惑在“忘我”的境界。我的疯狂不是要证明什么,只是想让自己进去冷漠的状态,“忘却”记忆中的部分,完全的释放自己。

我喜欢轻幽的节奏,让自己进入“记忆”的状态,跟随着音调进入“思念”的状态。我的清幽不是想证明什么,只是因为内心的害怕,只能偷偷的去“回忆”,哪怕一天、一时、一分、一秒。

我输掉了感情、爱情和做人应有的感觉,换来的只是孤注一掷的高傲。

 

通过清心醉

配置ecshop的Nginx+Apache+Mysql+Php环境

为什么一定要使用Nginx,还有搭配的教程作者在NGINX+APACHE+PHP+MYSQL整合已经说过了.

可是配置ecshop真的好麻烦,主要麻烦在PHP不能使用超过5.3的版本,否则就是修改所有的核心代码,那工程量会要人命的.

首先根据作者链接中所说,安装nginx+apache

确保nginx是可以正常访问的,并且apache启动是无错误的

注:在这假设目录使用apache的默认目录/var/www/html

然后我们来安装mysql,由于centos自带的mysql可能有点老,所以如果可以的话update下

yum install mysql mysql-server

记得顺便修改下mysql的root密码

mysql -u root;

mysql> use mysql;

mysql> UPDATE user SET password= PASSWORD(‘新密码’) WHERE user = ‘root’;

mysql> FLUSH PRIVILEGES;

然后:service mysqld restart;

重新进入MYSQL创建个UTF的ECSHOP数据库

create database if not exists ecshop default charset utf8 collate utf8_general_ci;

至于安装PHP,其实ecshop对PHP的最大限制是php 5.3.3

直接yum  也可以.

编译准备工作 yum groupinstall “Development tools”
然后是编译安装 PHP 需要用到的 devel 包:
yum install libxml2-devel gd-devel libmcrypt-devel libcurl-devel openssl-devel
接下来下载对应的PHP
编译安装 php的参数:
进入PHP目录
./configure –with-apxs2=/usr/local/apache2/bin/apxs –disable-cli –enable-shared –with-libxml-dir –with-gd –with-openssl –enable-mbstring –with-mcrypt –with-mysqli –with-mysql –enable-opcache –enable-mysqlnd –enable-zip –with-zlib-dir –with-pdo-mysql –with-jpeg-dir –with-freetype-dir –with-curl –without-pdo-sqlite –without-sqlite3

make
make install
cp php.ini-production /usr/local/lib/php.ini

是时候让 apache 知道有 php 的存在了,在 apache 配置文件 httpd.conf 中添加:
LoadModule php5_module modules/libphp5.so
#上面那行可能在编译安装 php 的过程中已经由系统自动添加了
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

OK!重启 apache,人品好的人是不会出现问题的。

因为Nginx接收到的动态请求会转发给apache,所以不需要使用php-fpm,除非使用nginx+mysql+php的搭配。

好了,到此ecshop的Nginx+Apache+Mysql+Php环境配置完成。

 

 

通过清心醉

Linux+Windows搭配WEB本地域名服务器

前言:我们都知道,如果要写代码开发,肯定是在WINDOWS下比较好,当然,就LINUX下来说,ZEND STUDIO也是很完善了的.

由于基本上使用的都是XAMPP快速部署环境,这样,在WINDOWS系统下,就会非常的缓慢,所以写出本教程

系统:Windows 8.1(分配IP192.168.1.234) + 虚拟机CentOS 6.5(分陪IP192.168.1.240)

域名:www.qingxinzui.com

Windows 8.1安装VM11,附载CentOs6.5系统,WEB服务器为:Apache+Nginx+Php+Mysql(在这作者假设你已经会搭配WEB环境)

上个星期作者有个文章说过,利用hosts文件来进行请求的转发.

在Windows 8系统里,我们首先利用hosts文件里添加以下跳转参数:

192.168.1.240  qingxinzui.com

192.168.1.240 www.qingxinzui.com

这时候只要访问作者本地的网站,就会跳转到IP为240的节点

好了,这时候如果CentOS系统里有站点信息并启用了服务的话,就可以实现了.

但因为作者的要求是要包含有域名的信息,而且作者使用了NGINX的域名绑定.所以我们需要修改下CentOS的hosts文件,参数和W8系统下的类似,只不过请求的IP为127.0.0.1

大概流程是:

W8系统请求访问网站,W8的hosts文件中存在跳转参数,实现以域名的方式跳转到指定的IP服务器,指定的IP服务器(CentOS系统)里的NGINX接收了域名访问的请求,再通过本身的hosts文件进行跳转到127.0.0.1

至此,双系统域名式访问站点部属完成.