极简单/简陋的wordpress插件:网站访客追踪记录

提醒:有了个新版本,照样很简陋,默认将追踪记录表放到单独的数据库里;如果表访问失败会给出简单的消息提示。 传送门: 极简单/简陋的wordpress插件:网站访客追踪记录 v0.0.2

wordpress本身没有用户访问记录的功能,甚至连文章点击次数都没有记录,当然可以借助google analytics之类的工具进行站点访问的分析,但对于极小访问量的站点来说,GA似乎显得太大材小用了,要是能够精确记录下每一个访客的活动情况,是最好不过的,但并没有找到相关的插件,所以就临时查阅资料,草草完成了这个访问活动记录的插件,功能极其简陋,今天-严格地说是昨天、现在已经1:57分,已经是"明天"了-才真正开始了解一点wp插件的开发

-------------------------------------------
插件源程序\wordpress\wp-content\plugins\fstrace\fstrace.php
 <?php
/*
Plugin Name: fs trace
Plugin URI: http://www.path8.net/
Description: This plugin will trace all visitor's visit action.
Version: 0.0.1
Author: fengyqf
Author URI: http://www.path8.net/
*/

/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

function fstrace_by_fengyqf(){
global $wpdb;
$url=mysql_escape_string(substr($_SERVER["REQUEST_URI"],0,200));
$referer=mysql_escape_string(substr($_SERVER["HTTP_REFERER"],0,200));
$cookie=mysql_escape_string(substr($_SERVER["HTTP_COOKIE"],0,250));
$client=mysql_escape_string(substr($_SERVER["HTTP_USER_AGENT"],0,200));
$ip=mysql_escape_string(substr($_SERVER["REMOTE_ADDR"],0,16));
$wpdb->query("insert into `my_wpplg_trace`(`referer`,`url`,`ip`,`client`,`cookie`)
values('{$referer}','{$url}','{$ip}','{$client}','{$cookie}')");

}
add_action('wp_footer','fstrace_by_fengyqf');

?>
-------------------------

需要有一张表存储追踪到的记录,插件本身没有创建数据表的功能,需要手工创建该表,语句如下:
-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2010 年 01 月 30 日 17:35
-- 服务器版本: 5.0.18
-- PHP 版本: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- 数据库: `wordpress`
--

-- --------------------------------------------------------

--
-- 表的结构 `my_wpplg_trace`
--

CREATE TABLE IF NOT EXISTS `my_wpplg_trace` (
`id` int(11) NOT NULL auto_increment,
`referer` varchar(200) character set utf8 NOT NULL default '',
`url` varchar(200) character set utf8 NOT NULL default '',
`time` timestamp NOT NULL default CURRENT_TIMESTAMP,
`ip` varchar(16) character set utf8 NOT NULL default '',
`client` varchar(200) character set utf8 NOT NULL default '',
`cookie` varchar(300) character set utf8 NOT NULL default '',
PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=4 ;

本来设置的是`cookie` varchar(300),但mysql服务器是4.1版本,varchar类型只能支持到255,在服务器mysql建表时只好改成`cookie` varchar(250)  ;比较无奈,购买虚拟主机附送的数据库,比较小,而且是4.1版,还不能用phpMyAdmin3.x连接——什么时间买个大点的5.x版的

---------------------------------
以前的追踪记录程序,一并列在这里,可能有点参考价值

之前借助在页面里插入以下这样代码的JS文件,籍以记录访客的记录,但对于搜索引擎的抓取,是无能为力了

$url=addslashes($_SERVER['HTTP_REFERER']);
$time=addslashes(date('Y-m-d H-n-s'));
$ip=addslashes($_SERVER["REMOTE_ADDR"]);
$client=addslashes($_SERVER["HTTP_USER_AGENT"]);
$cookie=substr(addslashes($_SERVER["HTTP_COOKIE"]),0,500);

$trace_table='fstrace';

$link = mysql_connect($mysql_host, $mysql_user,$mysql_pwd)
or die("Could not connect: " . mysql_error());
#print ("Connected successfully");
mysql_select_db($mysql_db);
$sql="insert into `{$trace_table}` (`url`,`time`,`ip`,`client`,`cookie`) values('{$url}','{$time}','{$ip}','{$client}','{$cookie}')";
mysql_query($sql,$link);
#echo $sql.''.mysql_affected_rows($link);
mysql_close($link);

或许您在阅读这篇文章时,您的IP地址、请求页面、cookie等信息已经记录在数据库里了,呵呵.

固定链接: http://www.path8.net/tn/archives/145

iis 404不用url rewrite组件也可以实现rewrite功能:原来不是很新鲜的技术

前不久无意中看到说iis服务器,即使不用rewrite组件,也可以实现rewrite功能,是借助404页面的一个巧妙应用,把所有页面都导向404页面,再由404载入相应的重写目标文件请求,因为使用linux+apache主机,没必要搞这东西,就没有仔细看这个功能的具体实现代码,但还是感觉到很新奇。而且那篇帖子的作者说是看到某个国外技术文章里讲的,借鉴来。

刚才,十分钟前,偶然看wordpress官方网站里的说明文档,发现了在wordpress里早就应用这一技术了:

wordpress管理后台-设置-固定链接

“WordPress 允许您更改默认的链接形式,以此提高 URLs 的可读性和对搜索引擎的友好程度。参考

 这里的“参考”链接里面就有以下一段:

  • Apache web server with the mod_rewrite module
  • Microsoft IIS 7+ web server with the URL Rewrite 1.1+ module and PHP 5 running as FastCGI
  • possibly Microsoft IIS 6+ using a 404 handler or Mod-Rewrite Pro
  • Lighttpd using a 404 handler or mod_rewrite or mod_magnet (see External sources)
  •  讲得很明白,404 handler 也可以实现,

    1 <?php
    2 $qs = $_SERVER['QUERY_STRING'];
    3 $pos = strrpos($qs, '://');
    4 $pos = strpos($qs, '/', $pos + 4);
    5 $_SERVER['REQUEST_URI'] = substr($qs, $pos);
    6 $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
    7 include('index.php');
    8 ?>

    看来还是老外的技术牛人多,老外的文章很多时候更有借鉴价值

    linux 下媒体播放器mplayer+kmplayer

    在fedora12下安装mplayer总是有很多问题,好几年前就用Linux,但仅仅是安装一下,草草用用,并没真正深入学习,很多地方都是一知半解,最近在fedora12下安装了官方svn最新的mplayer,但总是出一些这样那样的问题,装了kmplayer,设置播放核心为mplayer,很多问题都没有了,而且kmplayer在很多操作方面更容易上手一点,不你mplayer那样让人感觉到怪怪的。

    搞了老半天,凌晨1:22分,算是把数据导到wp里了(百度空间搬到wordpress)

    百度空间数据导入wordpress 2.9.1, 初步完成。 使用php数据采集器,hmjcj_1.3 采集数据,主要包括文章标题,分类,时间等。很简单的采集工具,称不上多好,但在这里够用了。 采集得到的数据整理,distinct得到所有文章分类,导入一个新表里,原始文章表里,加分类id号字段,update;时间整理出来。 本地新安装wp,把分类导入wp_terms,文章导入 wp_posts,在wp_term_taxonomy表,为分条wp_terms创建一条记录,直接使term_id与term_taxonomy_id相等,以免导文章分类号对应时麻烦。 导入文章与分类关系数据wp_term_relationships 几条主要语句: insert into `wp_posts` (post_author, post_date, post_date_gmt,  post_content, post_title, post_status , comment_status, ping_status, post_name, post_modified, post_modified_gmt , post_parent, post_type, comment_count, post_excerpt, to_ping, pinged, post_content_filtered) select 1, `time`, `time`, `body`, `title`, 'publish', 'open', 'open', `title`, `time`, `time`, 0, 'post', 0, '', '', '', '' from `fei5` insert into `wp_term_relationships`(term_taxonomy_id, object_id) SELECT `fei5`.cate_id, wp_posts.`id` FROM `fei5` inner join wp_posts on wp_posts.post_title=fei5.title SELECT wp_posts.`id`, wp_posts.post_title, `fei5`.cate_id, `fei5`.cate FROM `fei5` inner join wp_posts on wp_posts.post_title=fei5.title

    linux 下mplayer unable to find simple control 'pcm' 0 解决备忘

    系统环境:
    intel core1 T2250 1.73GHz/ i945 /3GRAM
    fedora linux 12 (以下软件环境都为FC12自带)
    gnome2.28.0
    gcc 4.4.2

    2010/01/07 从mplayer官方SVN下载最新的mplayer源码,手工编译,使用默认配置,仅加入GUI界面
    ./configure --enable-gui
    根据源码中reademe文档中的步骤,
    STEP1: Installing Binary Codecs
    STEP2: Configuring MPlayer
    STEP3: Compiling MPlayer
    ...

    先把codecs解压到/usr/local/lib/codecs/
    编译安装都正常,但播放视频文件时,总是出现mplayer unable to find simple control 'pcm' 0的警示框错误提示,而且持续的快速弹出、自动关闭,再弹出、关闭。虽然播放画面正常,声音也没什么差错,感觉却是很是不爽,决心解决这一问题:
    多方搜索,都没能找到有效的解决方案。
    网上说得最多的解决方法是:“把audio输出设置为pulse audio”

    但audio设置里没有这样的选项,如图:
    ubuntuforums.org上有人说(http://ubuntuforums.org/showthread.php?t=523735)
    I had this problem too, which i solved, after searching for ages on the internet, by simply enabling "Enable Software Mixer" under the audio tab in Mplayer preferences.

    结果错误提示没有了,可是声音也没有了,还出这样的错误警示框:
    could not open initialize audio device。
    有人说是因为音频设备被其它程序占用了,所以出现这样的错误,设置mplayer不使用default device、而是手工指定一个就可以解决这个问题结果还是不行,要么照样错误提示,要么没有声音;

    “在 linux下,mplayer可以說是你不二的多媒體選擇,當然realplayer也相當的不錯。出現Could not open/initialize audio device -> no sound這種錯誤大多數情況下都是由於其它應用程序啟動了audio device造成的,最簡單的方式就是為你的audio選擇一個不同的driver.
    “具體操作方法為去到達mplayer->preferences->audio,然後一個一個的試哪個能讓你的mplayer發音,然後這個問題就解決了,在舊版中有時與權限有關,如果是root身份的話就不會有問題。”
    于是胡乱换用别的audio选项,当月选用
    “sdl  SDLlib audio outpug”
    再点Configure driver 选用 alsa 再试播放,好了,声音画面都正常了。
    谨以些献给与我一样的linux初级玩家。

    如何将MS SQL数据库设置为单用户模式

    提问:
    如何将数据库设置为单用户模式,并将访问限制为只供 dbo 使用?解答:

    在 sql server 2000 中,数据库不能同时为单用户模式和只供 dbo 使用模式。而以下可选选项可以通过使用 alter database 命令来使用:
    alter database database set single_user。
    该命令限制用户只能逐个访问数据库。

    alter database database set restricted_user。
    该命令限制只有 db_owner、dbcreator 或 sysadmin 角色的成员才能访问数据库。

    alter database database set multi_user。
    该命令将数据库的访问权限返回其一般运行状态。