月度归档 2015年12月31日

通过清心醉

揭秘最近流行的投票关注公众号的另类吸粉

9月份作者写过一篇<php调用微信公众号关注用户>的文章,由于是完整的一个CLASS所以作者没有把代码进行共享(当然如果你需要可以EMAIL作者,作者会邮件一份给你)。最近老是看到有进行投票投票的,好郁闷了,所以写写该文章。

从营销的手段上来说,这叫做推广。汇集了商家,利用商家的产品做活动宣传奖品,达到了宣传商家的效果,同时关注的粉丝根据50%留和走可以大概统计获取的粉丝量。

没错,活动可以带来一定量的粉丝集,可是存活率能达到多少?我感觉这和公众平台的内中质量有关。

用一个SEO的表达方式:内容为王外链为皇

内容为王:就是用户公众平台的内容兴趣程序,是否达到了吸引用户停留查看的标准。

外链为皇:就是大家在朋友圈发,群里发,只要能发的地方就发,只要把链接发出去了,就实现了外链的推广效果。

很多主办方完全的疏忽了一点,你那么的外链出去了,那么多的人关注了,你的用户来的目的是什么?

也许我是因为处于朋友/亲戚/同事进行关注投票,但我对你的内容是毫无兴趣,当然谁都不知道用户的需求,这是需要对访问数据进行分析的。

我观察过90%以上的投票网站,都是独立的WEB,这点技术上基本都可以实现的,可是都没人做。

难道粉丝的数量大小比大数据分析出的详细小用户群体还更有价值?

通过清心醉

zend加密

由于国外的开源程序基本都是PHP5.3 ++ 所以导致很多无法使用

zend-loader

作者是针对LINUX进行编写:

不管你使用的是XAMPP还是WDCP还是自行编译后的环境,默认都是不存在Zend Guard Loader

php -v查看下:

[root@ChenKuiZong]# php -v
PHP 5.5.31 (cli) (built: Aug 13 2015 13:47:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend Guard Loader v3.3, Copyright (c) 1998-2014, by Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies

说明是加载成功了的。

说下添加方法:

下载上面的两个文件

放在自己定义的目录

然后修改php.ini

文章最后面添加:

[zend]
zend_extension= /var/Zend/ZendGuardLoader.so
zend_extension= /var/Zend/opcache.so

记得修改成你那文件的目录位置

以上两个文件为ZEND 编译之后的,直接使用即可

同时说明下: 使用Zeend Guard加密的时候,注意下PHP的版本

5.5版本支持php 5.3 – 5.4

7.0开始的支持php 5.5 – 5.6

比如作者使用的是php 5.5.9

7.0加密文件的时候切记选择php 5.5 否则加密之后在环境上市无法使用的!

作者就是加密的时候疏忽的使用了php5.6的版本,结果导致请求500错误

我们再来看看探针:

Zend Guard Loader

Zend Guard Loader enabled
License Path no value
Obfuscation level 0

 

 

通过清心醉

PHP多参数多表查询实例

虽然前段时间作者写了多表查询,但作者自己也老是忘记,昨晚就为这个多表查询搞得头晕晕的。而且如果针对SQL有多个WHERE条件的话,就需要不同的语句:

以下是作者写的针对省市地区进行的AJAX进行请求地区筛选的模型:

public function getSettdataStoredata($data){
#– 这里$data为AJAX请求的GET数组
$sql=”SELECT * FROM “.PREFIX.”storedata s1 LEFT JOIN “.PREFIX.”settdata s2
ON(s1.store_id = s2.store_id) WHERE s2.key=’zone_id’ AND s2.value='”.$data[‘zone_id’].”‘”;

#– 因为请求中必须会包含zone,也就是最少会有个省份的筛选,生成初始SQL语句关联storedata和settdata两个表
if (isset($data[‘city_id’]) && !empty($data[‘city_id’])){
$sql .=” AND s1.city_id= ‘”.(int)$data[‘city_id’].”‘”;
}

#– 如果AJAX请求中包含有城市参数,SQL语句进行组合
if(isset($data[‘diqu_id’]) && !empty($data[‘adder_id’])){
$sql .=” AND s1.adder_id = ‘”.(int)$data[‘adder_id’].”‘”;
}

#- 如果AJAX请求中包含有城市的详细地区筛选,SQL再次进行组合
$query=$pdo->query($sql);
return $query->fetchAll();
}

通过清心醉

Nginx配置域名泛解析

其实很简单,针对server_name进行标注下:

详细的NGINX泛解析请参考下述代码:

server {
listen 80;
server_name qingxinzui.com *.qingxinzui.com;
root /home/qingxinzui_blog;
index index.html index.php index.htm;
error_page 400 /errpage/400.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
error_page 405 /errpage/405.html;
location ~ \.php$ {
proxy_pass http://127.0.0.1:88;
include naproxy.conf;
}
location / {
try_files $uri @apache;
}
location @apache {
proxy_pass http://127.0.0.1:88;
include naproxy.conf;
}
}

通过清心醉

Opencart多站点BUG修复

今天做了下OPENCART内的外贸多语言多站点的开发,在OPENCART里默认有一个站点,如果有新添加站点后,重新修改默认站点的数据,导致默认站点的config_url不存在的现象。

先来分析下OPENCART修改默认店铺的流程:

默认的站点,使用的是setting/setting,修改的话不存在store_id的参数,如果是其他站点store_id为必须。

问题就来了。 因为默认站点不存在config_url的配置参数:

来看看setting的edit模型:
public function editSetting($code, $data, $store_id = 0) {
$this->db->query(“DELETE FROM `” . DB_PREFIX . “setting` WHERE store_id = ‘” . (int)$store_id . “‘ AND `code` = ‘” . $this->db->escape($code) . “‘”);

foreach ($data as $key => $value) {
if (substr($key, 0, strlen($code)) == $code) {
if (!is_array($value)) {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “setting SET store_id = ‘” . (int)$store_id . “‘, `code` = ‘” . $this->db->escape($code) . “‘, `key` = ‘” . $this->db->escape($key) . “‘, `value` = ‘” . $this->db->escape($value) . “‘”);
} else {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “setting SET store_id = ‘” . (int)$store_id . “‘, `code` = ‘” . $this->db->escape($code) . “‘, `key` = ‘” . $this->db->escape($key) . “‘, `value` = ‘” . $this->db->escape(serialize($value)) . “‘, serialized = ‘1’”);
}
}
}
}

在执行之前,OC已经完全的删除STORE=0的所有参数信息,然后重新写入

这样因为没有了默认的站点配置,就无法对基础站点的信息进行完整的区分,当然config.php里的文件就有定义常量HTTP_SERVER和HTTPS_SERVER但是多语言的实现URL的问题就会比较麻烦。

解决方法:

setting.tpl模型中添加个

<input type=”text” name=”config_url” value=”<?php echo HTTP_CATALOG; ?>” id=”input-owner” class=”form-control” />

 

 

通过清心醉

分析Opencart前端获取幻灯片的流程

小O这点做的和小M有点像

通过top/left/right布局,来调用对应的模型数据

$modules = $this->model_design_layout->getLayoutModules($layout_id, ‘content_top’);

#->根据布局ID和位置来提取布局内的模块

#->模型中读取layout_module根据排序提取布局ID和位置对应的模型数据

#->数据中会有一个$module[‘code’]的参数,使用的是类型.ID做连接

#->$part = explode(‘.’, $module[‘code’]);

#->然后使用foreach循环提取code值

$setting_info = $this->model_extension_module->getModule($part[1]);  #->根据PART来获取,PART稍后分析
#->操作数据模型-> module WHERE module_id='”.(int)$module_id.”‘”;

public function getModule($module_id) {
$query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “module WHERE module_id = ‘” . (int)$module_id . “‘”);
if ($query->row) {
return json_decode($query->row[‘setting’], true);
} else {
return array();
}
}

#->模型中,如果有存在对应的模型ID,解码JSON的setting数据到数组并返回

#->来看看JSON原型:{“name”:”Home Page”,”banner_id”:”7″,”width”:”1140″,”height”:”380″,”status”:”1″}

#->可以了,提取了有banner_id参数了

#->接下来$part[0]其实应该是类型 html/slideshow等

#->比如slideshow就是幻灯了

#->自然就要包含/module/slideshow控制器了

#->$data[‘modules’][] = $this->load->controller(‘module/’ . $part[0], $setting_info);

#-> 这样,在ControllerModuleSlideshow控制器里,index()方法中的参数也就存在了

最后作者说下part的参数值:通过打印出我们可以看到:

array(2) { [0]=> string(9) “slideshow” [1]=> string(2) “27” }
array(2) { [0]=> string(4) “html” [1]=> string(2) “32” }

第一就是类型了,第二是module的参数ID;这样就可以很精准的获取了!

 

通过清心醉

出售Business-To-Customer-To-Online(Offine)

系统特点:多域名多商家平台,由外贸B2B平台改版而成,可根据需求开发以下两种模式:

1:主平台SEO大数据版本

2:站群SEO商家版

同时支持交易版本,默认为免费版,收费版本附加有购物车功能

商家可以自行使用自己的支付宝、微信、京东等收款,不再需要通过网络运营商中转。

有意者联系admin@qingxinzui.com

电话:13823819185

 

通过清心醉

细说B2C-C2C-O2O-B2B

首先说下域名:
比如www.qingxinzui.com 这就是一个网站的域名,也可以叫网址

 

传统的交易模式B2C:
比如我建设了交易网站http://www.qingxinzui.com/
所有的产品由我管理,产品分类由我管理,系统维护什么的都是我自己管理
用户来购买东西,资金是到我的账户上,然后我再进行发货等流程步骤

而这里,我可以是个人,也可以是一个公司/企业。因为管理的人员是固定的
再来是新兴趋势O2O:
同样我有个交易网站:http://www.qingxinzui.com/
然后我有商家,比如商家A的用户名=ABC,用户B的用户名=CBA
那么再来看:
http://www.qingxinzui.com/index.php?username=ABC
http://www.qingxinzui.com/index.php?username=CBA
在这里和网址对比后面多了一个?username=ABC和?username=CBA
在网站开发这叫参数
通过index?username=XXXX
就可以知道访问的是哪个用户的产品
如果产生了交易,由网站运营商进行收钱,由用户名=ABC或CBA的进行发货
(这才是正宗的线上交易线下发货的O2O,目前只有京东天猫有在做)
而且因为商家可以管理自己的产品,所以商家可以修改产品的价格,只有商家才能更清楚产品的具体利润是多少
接着是C2C,最好的就是参考淘宝
其实模式和O2O差不多
为什么说差不多,因为O2O是将购买产品的钱打给网络运营商
而淘宝也是首先打到支付宝(只不过支付宝和银行有签约,所以可以实现自动转账给商家)
淘宝其实也就是一个网络运营商
不同的是:
O2O是线下发货,最大的特色是本地化,这样以来商家们都是严格认证的,而且购买者甚至可能知道店铺的实际位置在哪里
最后是B2B
O2O和C2C的升级版
同样我有个交易网站:http://www.qingxinzui.com/
然后我有商家,比如商家A的用户名=ABC,用户B的用户名=CBA
但是商家是独立的网站
比如商家ABC的网站可以是 http://abc.qingxinzui.com/
比如商家CBA的网站可以是 http://cba.qingxinzui.com/
如果做B2B的交易版,每个用户可以有独立的收款帐号,平台的盈利模式只能是网站入驻这一块

比如看淘宝是taobao.com
腾讯是qq.com
京东是jd.com
注意看,每个企业的网站名称是不一样的!
B2B就是实现多用户的多网站化
同时每个人做的搜索优化(SEO)效果不同,在百度和GOOGLE的效果也是差很远的!

通过清心醉

PHP操作MYSQL多表查询

我们在开发PHP的时候,经常为了更好对数据进行存储查询,我们都会使用多个数据表。

假设有一个user用户表(帐号、密码、ID等)和一个user_data用户数据表(用户ID、详细信息等)

这时候,传统的MYSQL操作是:SELECT * FROM user,user_data WHERE user.id=user_data.id;

如果有更多的话,就进行更多的关联,使用AND来进行

贴一个多表关联B2B的实际代码:

$sql= “SELECT * FROM ” .$pre. “product p LEFT JOIN “.$pre.”product_data pd
ON (p.product_id = pd.product_id)
LEFT JOIN “.$pre.”product_store ps ON(p.product_id = ps.product_id)
WHERE pd.language_id='”.$language_id.”‘
AND ps.store_id='”.$store_id.”‘”;

提取一个产品,要求是对应的店铺和对应的语言,并且产品的ID必须是在

product 产品序列表

product_data 产品详细信息表

product_store 产品所在店铺表

中存在的参数!

通过清心醉

Magento-B2B之htaccess多站共存

在这之前,作者来详细介绍下Magento系统的站点模式

一个Magento可以有无数个Code(网站唯一值)

然后在每个对应的站点里面又可以有无数个Website(网站店铺唯一)

在每个对应的店铺里可以有独立的不同语言

所以要实现B2B的前提,你能很好的区分网站和店铺和视图的差别。

然后每个不同的站都是独立化的。

因此需要htaccess文件来进行实现!

SetEnvIf Host www\.qingxinzui\.com MAGE_RUN_CODE=base
SetEnvIf Host www\.qingxinzui\.com MAGE_RUN_TYPE=website

SetEnvIf Host abc\.qingxinzui\.com MAGE_RUN_CODE=abc
SetEnvIf Host abc\.qingxinzui\.com MAGE_RUN_TYPE=website

SetEnvIf Host cba\.qingxinzui\.com MAGE_RUN_CODE=cba
SetEnvIf Host cba\.qingxinzui\.com MAGE_RUN_TYPE=website

假设作者现在的网站改成B2B模式,那么默认的CODE=base,TYPE=website

就是使用默认的站点-店铺-视图

否则根据不同的参数进行跳转到不同的站点。

我们来看index.php文件:

/* Store or website code */
$mageRunCode = isset($_SERVER[‘MAGE_RUN_CODE’]) ? $_SERVER[‘MAGE_RUN_CODE’] : ”;

/* Run store or run website */
$mageRunType = isset($_SERVER[‘MAGE_RUN_TYPE’]) ? $_SERVER[‘MAGE_RUN_TYPE’] : ‘store’;

Mage::run($mageRunCode, $mageRunType);

如果可以的话,也可以读取数据库的参数值来进行实现跳转,自己对index.php开始文件进行二次开发下就可以了

通过清心醉

WDCP-LANMP添加soap扩展

前提:你懂得如何升级WDCP的PHP版本

如作者现在使用的是PHP5.6.2的版本:

[root@QingXinZui files]# wget -c http://us1.php.net/distributions/php-5.6.2.tar.gz

下载对应的版本

[root@QingXinZui files]# tar zxvf php-5.6.2.tar.gz

解压

[root@QingXinZui soap]# cd php-5.6.2/ext/soap

进入目录内

[root@QingXinZui soap]# /www/wdlinux/php/bin/phpize

执行PHP配置

[root@QingXinZui soap]# ./configure –with-php-config=/www/wdlinux/php/bin/php-config –enable-soap

编译PHP

[root@QingXinZui soap]# make

[root@QingXinZui soap]# make install

安装

[root@QingXinZui files]# echo ‘extension=soap.so’ >>/www/wdlinux/etc/php.ini

写入配置文档

[root@QingXinZui files]# service httpd restart

重启服务