分类目录归档:php开源系统

PHP开源系统,php开源电子商务系统,php开发

laravel5.0在php7.0下异常解决

FatalErrorException in Handler.php line 25:

Uncaught TypeError: Argument 1 passed to App\Exceptions\Handler::report() must be an instance of Exception, instance of Error given, called in vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php on line 73 and defined in app\Exceptions\Handler.php:25

Stack trace:
#0 vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(73): App\Exceptions\Handler->report(Object(Error))
#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Error))
#2 {main}
thrown

 

laravel5升级php7.0后报以上错误,

原因:PHP7的改动中,影响比较大的,包括异常处理。PHP7实现了一个全局的throwable接口,原来的Exception和部分Error都实现了这个接口(interface), 以接口的方式定义了异常的继承结构。于是,PHP7中更多的Error变为可捕获的Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。这些可被捕获的Error通常都是不会对程序造成致命伤害的Error,例如函数不存

 

解决办法:

vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php

引入

use Symfony\Component\Debug\Exception\FatalErrorException;

然后在handleException使用大概73行

if (! $e instanceof Exception) {
    $e = new FatalThrowableError($e);
}

加入后如下

public function handleException($e)
{
    if (! $e instanceof Exception) {
        $e = new FatalThrowableError($e);
    }

    $this->getExceptionHandler()->report($e);

    if ($this->app->runningInConsole()) {
        $this->renderForConsole($e);
    } else {
        $this->renderHttpResponse($e);
    }
}

Mysql主从服务配置

Mysql主从服务配置

操作实例两台服务器
Win7 mysql5.5.*
VM虚拟机 Centos7 lnmp2 mysql 5.5.*

1.主服务器配置

修改主服务器mysql配置文件
windows下mysql配置文件名称my.ini
添加或者修改
log-bin=mysql-bin
server-id=1
查看server-id可以执行sql语句
show variables like ‘server_id’;
显示结果
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id     | 1     |
+—————+——-+

主服务器上执行sql语句创建slave帐户并授权slave:

GRANT REPLICATION SLAVE ON *.* to ‘slave’@’%’ identified by ‘123’;
这里可以指定从服务器的IP地址,先用%允许所有远程访问

登录主服务器的mysql查看master状态

mysql> show master status;
+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000004 |      107 |              |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

记录当前File,Position的值

重启主服务器mysql服务

2.从服务器配置

修改mysql配置文件,Lnmp的mysql配置文件位于/etc/my.cnf

添加或者修改server-id,不能于主服务器的server-id冲突

server-id=2

重启从服务器mysql服务

登录终端执行sql语句
1.停止slave:
stop slave;
2.执行master语句:
change master to master_host=’主服务器IP地址’,master_port=’3306′,master_user=’slave’,master_password=’123′,
master_log_file=’mysql-bin.000001′,master_log_pos=107;
3.启动slave
start slave

4.查看slave状态
show slave status \G

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.168
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 107
Relay_Log_File: localhost-relay-bin.000015
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Slave_IO_Running,Slave_SQL_Running如果任何一个No都是失败的,具体错误信息可以查看mysql错误日志

这里完成了简单mysql主从配置,可以在主服务器创建数据库表看看效果,
搭配读写分离的PHP框架开始装逼飞吧

linux搭建SVN服务器

linux搭建SVN服务器,最近在VM的linux服务器搭建svn服务,整理下大致实现过程,有用的朋友拿走。

安装:

# yum install subversion
# yum install mod_dav_svn

配置:
1. 建立一个svn的根目录,

# mkdir -p /home/svn/project

2. 为project建立子目录,可以作为每个项目库

# mkdir -p /home/svn/project/pro1

3. 建立project的版本库

# svnadmin create /home/svn/project/pro1

4. 修改svnserve.conf配置文件

# vi /home/svn/project/pro1/conf/svnserve.conf

[general]
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
authz-db = authz # 访问控制文件
password-db = passwd # 指明密码文件路径

5.配置authz

# vi /home/svn/project/pro1/conf/authz

[groups]
admin = root        # <用户组名> = <用户1>,<用户2>其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
[pro1:/]              # pro1
@admin = rw            # @<用户组名> = <权限>
* = r                  # <用户名> = <权限>

注:这里[pro1:/]对应上边版本库

6. 修改用户密码文件passwd

# vi /home/svn/project/pro1/conf/passwd

[users]
root=  123 # <用户1> = <密码1>

运行

# svnserve -d -r /home/svn/project/

7. 检查端口

# netstat -ntlp|grep 3690

tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      15087/svnserve

8. 本机测试SVN:

#svn co svn://127.0.0.1/pro1

【注:svn checkout 简写:svn co 】

9. 停止SVN的方法:

PS查看:

#ps -ef| grep svn

33321?        00:00:00 svnserve

#kill 33321

10.添加防火墙:

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 3690 -j ACCEPT

由于我是在VM中安装,自己电脑已安装windows SVN,直接右键svn checkout输入svn地址,根据要求用户名root密码123

11.linux下svn命令大全

以下是转子网络的一些关于svn在linux下的操作命令用法

1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [–force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

 

Magento普通页面获取所有评论reviews

Magento在普通页面获取所有的评论reviews

下载附件:Allreviews

在目录app\code\local\Mage\Review\Block创建Allreviews.php

然后模板app\design\frontend\default\default\template\review

创建reviewslist.phtml

后台cms page中创建review然后content中调用
{{block type=”review/allreviews” template=”review/reviewslist.phtml”}}
访问
http://域名/review

参考互联网希望对大家有用

magento DUPLICATE ENTRY ” FOR KEY ‘UNQ_SALES_FLAT_ORDER_INCREMENT_ID’

问题可能出现在修改完订单编号后,提交订单到支付平台取消返回后继续提交,会出现类似

 

magento DUPLICATE ENTRY ” FOR KEY ‘UNQ_SALES_FLAT_ORDER_INCREMENT_ID’

解决办法

/app/code/core/Mage/Sales/Model/Resource/Quote.php

 

public function isOrderIncrementIdUsed($orderIncrementId)Line number 146

$bind = array (‘:increment_id’ => (int) $orderIncrementId);

Replace it with below line

$bind      = array(‘:increment_id’ => $orderIncrementId);

 

希望有帮助!!!

 

ecshop the table ‘ecs_sessions’ is full

访问ECSHOP网站的时,突然会出现下面错误提示:

MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Error ) [1] => Array ( [sql] => INSERT INTO `howjia`.`hsd_sessions` (sesskey, expiry, ip, data) VALUES (’6e29308d83asdf3f30446122f49e89023156′, ’1297816061′, ’14.239.213.116′, ‘a:0:{}’) ) [2] => Array ( [error] => The table ‘ecs_sessions’ is full ) [3] => Array ( [errno] => 1114 ) )

解决方案:

1.根据错误提示判断是ecs_sessions表满了,打开ecs_sessions表,清理一些数据或者全部清空。

2.通过程序设置可以解决这个问题。

程序解决方法是:

设置includes/cls_session.php里的

var $max_life_time = 800,

这个数值根据网站访问量的大小来定,访问越大可以设置的越小。

Magento产品页面404

大家有时候会使用sql语句:

TRUNCATE `log_quote`;
TRUNCATE `log_summary`;
TRUNCATE `log_summary_type`;
TRUNCATE `log_url`;
TRUNCATE `log_url_info`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
TRUNCATE `log_visitor_online`;
TRUNCATE `report_event`;
TRUNCATE `report_event_types`;

清空Magento的数据库日志;这个可能导致Magento产品页面访问404,解决办法

执行sql语句

INSERT INTO `report_event_types` (`event_type_id`, `event_name`, `customer_login`) VALUES
(1, 'catalog_product_view', 1),
(2, 'sendfriend_product', 1),
(3, 'catalog_product_compare_add_product', 1),
(4, 'checkout_cart_add_product', 1),
(5, 'wishlist_add_product', 1),
(6, 'wishlist_share', 1);

分享CentOS 6.2 64 bit(64位)安装wdcp管理面板

我使用的是linode的CentOS 6.2 64 bit(64位)环境

安装WDCP倒是挺简单,但是想让支持Magento就得开启pdo_mysql和innodb,就比较麻烦了

反反复复好几次,这里总结下经验,看能不能帮到需要的朋友:

wdcp支持两种安装方式
1 源码编译 此安装比较麻烦和耗时,一般是20分钟至一个小时不等,具体视机器配置情况而定
2 RPM包安装 简单快速,下载快的话,几分钟就可以完成

源码安装
(ssh登录服务器,执行如下操作即可,需root用户身份安装)
wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz
tar zxvf lanmp_laster.tar.gz
sh install.sh
4个可选安装,如下图

1,2,3 是安装独立的环境,不可自由切换nginx,apache,nginx+apache应用环境
4 是安装所有,即可在wdcp的后台里自由切换nginx,apache,nginx+apache的应用环境

卸载(注意备份数据,否则后果自负)

sh install.sh uninstall
就可以

[我使用的是一下RPM包安装方法]

登陆SSH后:


RPM包安装

wget http://down.wdlinux.cn/in/lanmp_wdcp_ins.sh
sh lanmp_wdcp_ins.sh
就可以
RPM包安装支持系统:CentOS 5.X/wdlinux_base 5.X/wdOS 1.0,CentOS 6.X ,32位,64位均支持

卸载
 (切记备份好数据)
sh lanmp_wdcp_ins.sh uninstall
就可以

等待安装过程,祝你顺利的安装成功!

注意如果你要安装magento:安装结束后别忙着登陆wdcp管理后台,先安装两个扩展

pdo_mysql的安装

wget -c http://down.wdlinux.cn/in/pdo_mysql_ins.sh
chmod 755 pdo_mysql_ins.sh
./pdo_mysql_ins.sh

pdo_mysql安装挺快,最后提示安装OK,继续:
mysql innodb的安装
wget -c http://down.wdlinux.cn/in/mysql_innodb_ins.sh
chmod 755 mysql_innodb_ins.sh
./mysql_innodb_ins.sh

这两个扩展安装成功OK后

PDO_mysql可以通过phpinfo查看

innodb可以通过phpmyadmin进入后查看引擎或者进入mysql,wdcp安装后默认的mysql 用户root 密码wdlinux.cn

进入后 show plugins;

 

mysql> show plugins;  命令查看MySQL已经安装的插件

+————–+———-+——————–+———————+———+
| Name         | Status   | Type               | Library             | License |
+————–+———-+——————–+———————+———+
| binlog       | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| partition    | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| ARCHIVE      | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| BLACKHOLE    | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| CSV          | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| FEDERATED    | DISABLED | STORAGE ENGINE     | NULL                | GPL     |
| MEMORY       | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| InnoDB       | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| MyISAM       | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| MRG_MYISAM   | ACTIVE   | STORAGE ENGINE     | NULL                | GPL     |
| INNODB_TRX   | ACTIVE   | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     |
| INNODB_LOCKS | ACTIVE   | INFORMATION SCHEMA | ha_innodb_plugin.so | GPL     |
+————–+———-+——————–+———————+———+
12 rows in set (0.00 sec)
安装完后,默认的后台管理地址如下
http://ip:8080
用户名:admin 默认密码:wdlinux.cn
mysql默认的管理用户名:root 默认密码:wdlinux.cn

相关说明
所有软件安装目录/www/wdlinux
站点配置文件
/www/wdlinux/nginx/conf/vhost
/www/wdlinux/apache/conf/vhost
数据库配置文件/www/wdlinux/etc/my.cnf
数据库数据文件目录 /www/wdlinux/mysql/var

可能问题
1 登录时提示超时,检查下系统时间是否为当前时间
2 重装后重新打开IE,否则会有session错误提示的问题

解决Magento一页支付IWD Free One Page & One Step Checkout插件里订单留言不发送邮件

Magento免费的一页支付插件(IWD Free One Page & One Step Checkout)安装完之后有一个comment的表单,默认在后台是关闭的,打开后好让客户能在下单的同时留言,对订单的补充。
打开之后后台里可以看到留言,但是订单邮件里没有留言,后面经过查看代码,发现magento一页支付插件默认是不发送留言到邮件里的,之后安装另外的订单留言插件对比下看里面少了一些发送留言到邮件的代码。
需要在一页支付插件IWD的文件夹目录下找到IWD/OnepageCheckout/Model/ observer.php 文件,并在函数addHistoryComment 里增加几行代码即可,代码如下红色字体。

public function addHistoryComment($data)
{
$comment = Mage::getSingleton('customer/session')->getOrderCustomerComment();
$comment = trim($comment);

if (!empty($comment))
{
$data['order']->addStatusHistoryComment($comment)->setIsVisibleOnFront(true)->setIsCustomerNotified(false);
//added these lines:
$order = $data->getEvent()->getOrder();
 $order->setCustomerComment($comment);
 $order->setCustomerNoteNotify(true);
 $order->setCustomerNote($comment);
}
}

如果没反应,在修改邮件模板

app/locale/en_US/template/email/sales/下

order_new.html

order_new_guest.html

在里边找适当位置添加

{{var order.getOnestepcheckoutCustomercomment()}}

Magento获取产品ID,根据ID获取产品信息

Magento获取产品ID,根据ID获取产品信息,如果想在产品页面的其他相关页面,比如左侧、头部、底部获取产品的信息:
如果知道ID是最好的,但是不知道的情况下,我们可以先获取当前产品id

$product_id = Mage::registry(‘current_product’)->getId();
$_product = Mage::getModel(‘catalog/product’)->load($product_id);

可以先判断是否为产品页面

if (Mage::registry(‘product’)){/**/}//先获取是否为产品页面

然后直接获取产品相关信息

echo $_product->getShortDescription(); //product’s short description
echo $_product->getDescription(); // product’s long description
echo $_product->getName(); //product name
echo $_product->getPrice(); //product’s regular Price
echo $_product->getSpecialPrice(); //product’s special Price
echo $_product->getProductUrl(); //product url
echo $_product->getImageUrl(); //product’s image url
echo $_product->getSmallImageUrl(); //product’s small image url
echo $_product->getThumbnailUrl(); //product’s thumbnail image url