分类 语言编程 下的文章

请输入图片描述
前段时间升级了Nginx.看了一下php,版本虽然不是很老,,但是最近看了一下php框架,貌似都是在php7的方向弄了.所以就直接顺便把php也升级了,也是使用源码编译方式实行的.现在大概说一下升级过程,仅供参考.

准备工作

可以参考一下我早期写的php升级过程,大致准备工作也是差不多.建议把常用的编译依赖如openssl,curl等先升级到最新的版本.升级方法自己百度一下.

编译PHP的指引

可以参考sf上面的这个文章
PS:'configure'过程注意错误提示.如果是使用DO主机使用make命令的时候记得加-jN参数这个N可以是4,速度快很多啊.例如:

make -j4

make test的时候出错了可以认真检查一下错误.实在不行不管make test结果.直接make install一下有时候也是OK的哦.

一些坑

Typecho支持PHP7

需要将 Typecho 的数据库引擎修改为 pdo_mysql
修改 config.inc.php 文件中的

$db = new Typecho_Db('Mysql', 'typecho_');

改为:

$db = new Typecho_Db('Pdo_Mysql', 'typecho_');
依赖库问题
  1. 多用locate或find命令查找已安装的lib文件
  2. 用ln命令做软连接
  3. 注意64位库的问题

最后,祝你好运

-EOF-

Read More

nginx.png
这个VPS是LNMP模式部署的.今天刚好有空,看到nginx已经是2016年的版本了.所以就顺便升级一下.整个过程大概用了5分钟.还好吧.很简单,方法如下:

准备工作

在shell上使用命令"nginx -V",查看原来Nginx的版本和编译信息.你会得到类似的信息

face@zen:~# nginx -V
nginx version: nginx/1.12.1
built by gcc 4.7.2 (Debian 4.7.2-5) 
built with OpenSSL 1.0.1t  3 May 2016
TLS SNI support enabled
configure arguments: --sbin-path=/usr/sbin --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

!注意,建议用记事本复制configure arguments:后面的信息.因为等会编译新的nginx时候需要使用.

使用wget下载最新版本的nginx,建议选择Stable版本.

地址:http://nginx.org/en/download.html

开始编译(下面步骤都在shell上完成)

configure

解压文件

tar -zxf nginx-1.15.8.tar.gz

执行configure命令

./configure --sbin-path=/usr/sbin --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

!注意:这个configure参数直接复制准备工作环节保存的原参数,一定要原参数

make

make

备份旧nginx

configure参数里面有个--sbin-path,那个参数指的就是nginx安装位置.我的是/usr/sbin,所以我用下面的命令备份:

mv /usr/sbin/nginx /usr/sbin/nginx_old_1.12.1

替换nginx

cp objs/nginx /usr/sbin

测试nginx配置文件

nginx -t

重启nginx

nginx -s stop
nginx

结束语

完成上面的步骤,你可以使用nginx -V命令看下是不是最新版本了.很简单:D

Read More

拥有原来的myql的root的密码;

方法一: 在mysql系统外,使用mysqladmin

# mysqladmin -u root -p password "test123" Enter password: 【输入原来的密码】

方法二: 通过登录mysql系统,

# mysql -u root -p
Enter password: 【输入原来的密码】 
mysql>use mysql; 
mysql> update user set password=passworD("test") where user='root'; 
mysql> flush privileges; mysql> exit;


忘记原来的myql的root的密码;

首先,你必须要有操作系统的root权限了。要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤。
类似于安全模式登录系统,有人建议说是pkill mysql,但是我不建议哈。因为当你执行了这个命令后,会导致这样的状况:

/etc/init.d/mysqld status
mysqld dead but subsys locked

这样即使你是在安全模式下启动mysql都未必会有用的,所以一般是这样/etc/init.d/mysqld stop,如果你不幸先用了pkill,那么就start一下再stop咯。

# mysqld_safe --skip-grant-tables &
&,表示在后台运行,不再后台运行的话,就再打开一个终端咯。
# mysql
mysql> use mysql;
mysql> UPDATE user SET password=password("test123") WHERE user='root';   
mysql> flush privileges;
mysql> exit;                         
##本来mysql是不分大小写的,但是这个是修改的mysql中的mysql数据库的具体的值,要注意到。

Movable-Type-Logo.png

MT是我使用时间最长的一个博客程序。它基于Perl,功能强大而且可靠性十分稳妥。然而,在快餐文化异常普及的当下,显得疲态百出。它没有php程序的灵活,部署简易,直白点说是折腾。因为站点移到国外的VPS的原因,国内连接速度只带不敢恭维,因此MT也成了使用困难丛丛的选择了。无奈只能转投效率优先的typecho。

因为博客思路设计的差异,我仅仅转换了原来的文章及相关评论。涉及到的数据表也只有3个。有需要的朋友可以参考下。将下面的源码保存为php文件,放在typecho博客根目录然后运行即可。(建议做好相关数据库备份后,在本地转换成功后再上传)

<?php
/**
 * Typecho Blog Platform
 *
 * @copyright  Copyright (c) 2008 Typecho team (http://www.typecho.org)
 * @license    GNU General Public License 2.0
 * @version    $Id: index.php 1153 2017-03-12 10:53:22Z ezo.biz $
 */

/** 载入配置支持 */
if (!defined('__TYPECHO_ROOT_DIR__') && !@include_once 'config.inc.php') {
    file_exists('./install.php') ? header('Location: install.php') : print('Missing Config File');
    exit;
}

/** 初始化组件 */
#Typecho_Widget::widget('Widget_Init');
$d_MT = "blog";
/**
 * 初始化mt数据库
 */
$dbMT = new Typecho_Db('Mysql', 'mt_');
$dbMT->addServer(array (
   'host' => '127.0.0.1',
   'user' => 'root',
   'password' => '123456',
   'charset' => 'utf8',
   'port' => '3306',
   'database' => $d_MT,
 ), Typecho_Db::READ | Typecho_Db::WRITE);
 Typecho_Db::set($dbMT);
//清空原有数据
$db->query("DELETE FROM `typecho_contents`;");
$db->query("DELETE FROM `typecho_relationships`;");
$db->query("DELETE FROM `typecho_comments`;");

$a=$dbMT->query("SELECT entry_id,entry_created_on,entry_modified_on,entry_title,Entry_text,entry_text_more,entry_basename FROM mt_entry;");
$posts = $dbMT->fetchAll($a);
foreach($posts as $post){
  unset($sql);
  $post['entry_created_on'] = strtotime($post['entry_created_on']);
  $post['entry_modified_on'] = strtotime($post['entry_modified_on']);
  if(!empty($post['entry_text_more']) || ($post['entry_text_more'] !="")){
    $post['Entry_text'] = $post['Entry_text'].$post['entry_text_more'];
  }
  $post['Entry_text'] = preg_replace('/(http|https)(.*?)(ezo\.biz\/b\/).*?(\/)((?:[a-z0-9_-|\.|-]*)(\.)(gif|jpeg|jpg|png))/i', "/b_img/$5", $post['Entry_text']);
  $post['Entry_text'] = str_replace("http://ezo.biz","https://ezo.biz",$post['Entry_text']);
  $post['Entry_text'] = str_replace("http://www.ezo.biz","https://www.ezo.biz",$post['Entry_text']);
  $post['Entry_text'] = mysql_real_escape_string($post['Entry_text']);
  $post['entry_title'] = mysql_real_escape_string($post['entry_title']);


  /**
   * 修复typecho slug主键唯一的问题
   */
  $d = gmdate('Ymd',$post['entry_created_on']);
  $post['entry_basename'] = $post['entry_basename']."-$d";


  $sql = "INSERT INTO `typecho_contents` (`cid`, `title`, `slug`, `created`, `modified`, `text`, `order`, `authorId`, `template`, `type`, `status`, `password`, `commentsNum`, `allowComment`, `allowPing`, `allowFeed`, `parent`, `views`, `viewsNum`, `likesNum`)  VALUES (NULL, '$post[entry_title]', '$post[entry_basename]', '$post[entry_created_on]', '$post[entry_modified_on]', '$post[Entry_text]', '0', '1', NULL, 'post', 'publish', NULL, '0', '1', '1', '1', '0', '0', '0', '0');";
  //返回文章id
  $cid = $db->query($sql,Typecho_Db::WRITE,Typecho_Db::INSERT);
  //绑定目录
  $db->query("INSERT INTO `typecho_relationships` (`cid`, `mid`) VALUES ('$cid', '1');");

  /**
   * 转换评论
   */
  $b = $dbMT->query("SELECT comment_author,comment_created_on,comment_email,comment_entry_id,comment_ip,comment_text,comment_url FROM mt_comment WHERE comment_visible=1 AND comment_entry_id=$post[entry_id];");
  $comments = $dbMT->fetchALL($b);
  foreach ($comments as $comment) {
    # 批量导入评论
    $comment['comment_created_on'] = strtotime($comment['comment_created_on']);
    $db->query("INSERT INTO `typecho_comments` (`coid`, `cid`, `created`, `author`, `authorId`, `ownerId`, `mail`, `url`, `ip`, `agent`, `text`, `type`, `status`, `parent`) VALUES (NULL, '$cid', '$comment[comment_created_on]', '$comment[comment_author]', '0', '0', '$comment[comment_email]', '$comment[comment_url]', '$comment[comment_ip]', NULL, '$comment[comment_text]', 'comment', 'approved', '0');");
  }
}

ssl.png

因为目前ssl要求比较迫切。很多朋友随便搜索一篇指引文章后就直接抄袭相关配置然后就配置配置出来的ssl虽然表面上看上去没有什么问题,但实际是不规范的。大家可以通过这个网址:https://www.ssllabs.com/ssltest/ 去检测下自己的ssl配置是否科学。

最近爬文发现一个nginx的ssl配置介绍(点击这里查看)感觉不错,按照这个文章指引配置的ssl,在ssl检测一般都能拿到A+这个水平。如果你有多个站点,建议将ssl配置部分做成ssl.conf放在nginx的global文件夹中作为引用文件,真的十分实用。本人的ssl.conf示例如下,大家可以参考下:

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout  10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE:!kEDH;
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /usr/local/nginx/startssl_trust_chain.crt;
    add_header Strict-Transport-Security "max-age=31536000";
    resolver 8.8.8.8 8.8.4.4;

-EOF-

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×