Apache启动时报443端口被占用的处理方法

下午在自己机上装了Apache2.4, 启动时说443端口被占了:

(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: mak
e_sock: could not bind to address [::]:443
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: mak
e_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down

杀掉占用443的那个程序当然可以, 另一种方法是把443改成另外的不常用端口: 如这篇文章 …

more ...

使用jqPlot绘制统计图-1

要在网页上显示统计图, 可以在服务器生成图片后发给浏览器, 也可以把数据发给浏览器, 用JavaScript画. jqPlot是后者的一种, 它是jQuery的一个插件, 是完全运行于客户端的绘图包. 下面简介一下它的使用.

引用库文件

jqPlot 是 jQuery 插件, 需要在网页上引用 jQuery 和 jqPlot 包中的以下的几个文件.

要注意这几个只是最基本的, 要做出各种图形效果的话, 需要另外再引用其他的一些文件, 后面会分别介绍.

<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
<script …
more ...

在Jekyll的博客中实现语法高亮

在Jekyll的博客中实现语法高亮方法如下:

  1. 在配置文件 _config.yml 启用 pygments, 并使用redcarpet做为渲染引擎.
    pygments: true
    markdown: redcarpet
  1. 使用以下格式把代码括起来
    ```python
    print("hello world")
    ```
  1. 在页面上添加语法高亮的CSS文件, 像这样:
    <link rel="stylesheet" href="/css/pygments.css" />

说明:

使用 redcarpet 是为了支持所谓的 Github风格的Markdown语法, 也就是像上面的那样三撇号加语言类型的方式进行代码引用, 其他几个渲染引擎要用这种比较别扭的方式来把代码括起来, 我觉得这么写不好看.

语法高亮的定义文件可以在 这里下载, 对应的效果可以在 pygments的官网的Demo里试看.

一直在纠结我的 Blog 中的代码为啥没有语法高亮, 看着Jekyll官网中漂亮的代码就更纠结了, 今天终于解决了, 刚把十几篇文章的代码都加上语言类型, 呼 …

more ...


MySQL中 REPLACE 与 INSERT ON DUPLICATE KEY UPDATE 的区别

MySQL中, 要一步实现 "如果没有则插入, 如果存在则替换" 这样的操作, 有两种方式, REPLACEINSERT ... ON DUPLICATE KEY UPDATE. 这两种方法是有区别的.

它们之间的共同点是, 要求表中有 UNIQUEPRIMARY KEY 的列, 不然没法判断是否需要替换, 这两都会变成和普通 INSERT 一样了.

不同之处在于, 如果存在重复的主键值, REPLACE 执行的是先删除, 后插入. 这样做一个后果是会导致索引碎片化, 降低效率. 更重要的是, 这条命令是无法进行部分更新的, 命令中没有赋值的列, 都会被设为默认值!

REPLACE 的语法示例如下:

    REPLACE INTO
      ratings
    SET
      quote_id = 100,
      user_id = 200,
      score = 10 …
more ...

雷人的PHP的运算符优先级

PHP中的运算符优先级, 比较运算符高于位运算符, 赋值运算符高于部分逻辑运算符, 真是坑啊.

比较运算符高于位运算符, 所以

$A == $B & $C 等价于 ($A == $B) & $C不是先做&再进行比较

赋值运算 and or xor 高于逻辑运算, 但却低于 &&||, 所以

<?php
    $a = true and false;
    var_dump($a);    // 输出是 bool(true)

    $b = true and false;
    var_dump($b);    // 输出是 bool(false)

上面那行居然是 先把 true 赋给 $a, 然后再与后面的false …

more ...