0%

做magento开发,为了方便数据同步,直接把线上数据库导入本地,结果后台管理界面直接返回404。在stackoverflow找到了解决方法,执行如下sql语句,即可解决。

SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;

按照作者的意思,store_id,group_id,website_id,customer_group_id这些id的值应该是0,但在数据导入新服务器时丢失了。从sql语句中推测大概是因为外键检查导致的数据丢失。所以重新设置数据库的这些字段可以解决问题。

当文件已经更新,想要忽略本地的改动时,就不能使用.gitignore了,可以使用
git update-index --assume-unchanged /path/to/file
想要继续跟踪这些文件时,执行
git update-index --no-assume-unchanged /path/to/file

vim中使用正则表达式的格式稍有点却别,今天用分组搜索时发现(是可以直接搜索到的,括号要用作语法词时,需要转意写为\(

写个脚本,需要用到grep的零宽断言。拿grep -E尝试了半天都没效果。换用grep -P后,问题解决。以后还是统一用grep -P进行正则匹配吧。

新的项目要用mysql5.6.x,centos默认的yum库只有mariadb,兼容mysql5.5。
看msyql文档装了社区版的5.7,却无法进入mysql,看到网上介绍的mysqld_safe指令重置密码,却发现5.7没有mysqld_safe指令。郁闷ing,再没找到其它方法,只能卸载5.7,安装5.6。

Mysql官网有详细的介绍:
1.使用运行mysql服务的账号登陆系统。
2.停止mysql服务,我使用命令:

1
systemctl stop mysql

3.新建一个文件,写入如下内容:

1
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

MyNewPass 字段使用新的密码
4.妥善保管上一步得到的文件,确保mysql命令有权限读取该文件。
5.执行命令

1
mysqld_safe --init-file=/home/me/mysql-init &

这里/home/me/mysql-init就是第三步得到的文件
6.mysql服务启动后,删除/home/me/mysql-init文件。

之后就可以用新密码登陆mysql了,记录一下。

新装了centos系统,发现时区设置不对,网上搜索后发现centos的时区设置稍微有点特殊,做个记录。

在/etc目录下执行 ll localtime 结果发现 localtime -> ../usr/share/zoneinfo/America/New_York ,”本地时间”实际上是纽约时间。centos系统的时区文件在/usr/share/zoneinfo/目录下,很容已能找到 Asia/Shanghai 文件,删除原来的 /etc/localtime ,然后执行如下命令

1
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

现在的系统时间就是“北京时间”了。

1.新的段落,换行之后加一个回车。
2.数学公式中有_的,都要写成\_,以免自动转换成斜体。
3.要写hexo语法词时使用
<% raw %>
code
<% endraw %>
不转义code内容
4.要手写单页css style时,要把css标签写在后面,不能写在开头。
5.文章结尾不能出现```,几率导致生成index页时,该文章之后的文章无法加载到index。文章结尾还是加一个空行比较保险。-_-|||

按照中文的习惯,每段都要空两个字符,结果用markdown时,发现手动输入的空格都被过滤了,无效。搜索一番后找到方法,两个&emsp;即可解决。

但是每次都要手动输入,比较麻烦,想到了用css解决,加入这么一段就OK `p{text-indent: 2em;}`

脑洞大开,又想到了其它效果,**首字下沉**,也找到了相应的css `p:first-letter:first-child {font-size:2.5em; font-family:"楷体","楷体_GB2312"; font-weight:bold; line-height:1.2em; float:left; padding:5px 2px 0 0; color:#c00;}`

这下两种方案都有了解决方法,然后又有了新的想法,要是两种方案能通过变量控制就更好了。

方法,在主题的/layout/_partials/head.swig文件中增加如下代码:

{% if is_post() %}
{% if page.paragraph === 'ds' or page.paragraph === "" %}
<style type="text/css">
p{text-indent: 2em;}
</style>
{% elseif page.paragraph === 'fd' %}
<style type="text/css">
p:first-letter {font-size:2.5em; font-family:"楷体","楷体_GB2312"; font-weight:bold; line-height:1.2em; float:left; padding:5px 2px 0 0; color:#c00;}
</style>
{% endif %} {% endif %}

写文章时,在Front-matter中加上 paragraph: ds/fd字段,ds表示段落前增加两个空字符;fd表示首字下沉;不写时默认为ds;不想要段落格式转换时填上其它内容,我用了none。后期有其它想法时,可以再增加。

今天遇到个怪事,nginx server_root目录下的文件有读权限,层层目录也都有执行权限,但就是无法访问。

各种google之后终于找到了原因。关闭SELinux之后访问正常,暂时不清楚具体原因,做个记录先。

1、销毁一个session变量使用unset($_SESSION['myvar']_);
我们不能销毁整个$_SESSION数组(unset($_SESSION)),因为这样将禁用会话功能。要一次销毁所有的会话变量,可以使用如下所示语句:

1
$_SESSION = array();

当使用完一个会话后,首先应该注解所有的变量,然后再调用:session_destroy();来清除会话ID

2、eval() 把字符串作为PHP代码执行

3、is_file()file_exists() 的区别:当参数是目录时,file_exists()返回 trueis_file() 返回false;
4、 __autoload()spl_autoload_register()都是自动加载php文件。区别是:spl_autoload_register()高效且支持多个,方便在框架中和在第三方库时使用。__autoload()可能在后期的版本中弃用。所以尽量使用spl_autoload_register()
5、 $GLOBALS['HTTP_RAW_POST_DATA'] 在php5.6.0开始弃用,使用 php://input 代替,如: file_get_contents("php://input");
6、建议避免将三元运算符堆积在一起使用。当在一条语句中使用多个三元运算符时会造成 PHP 运算结果不清晰:
Example #4 不清晰的三元运算符行为

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// 乍看起来下面的输出是 'true'
echo (true?'true':false?'t':'f');

// 然而,上面语句的实际输出是't',因为三元运算符是从左往右计算的

// 下面是与上面等价的语句,但更清晰
echo ((true ? 'true' : 'false') ? 't' : 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>