W

关于生活

On 2012 年 03 月 14 日, in 杂谈, by 茗梓

好久没有更新博客了,感觉空间买了是用来浪费滴,索性还是写写吧。

这个学期的生活,起了比较大的改观,各种事情都显得井井有条,还是令人满意的生活。现在最急迫的还是身体,希望以前用健康身体换来的高分,现在能够用时间和金钱都换回来。这么早就能明白身体对于一个人来说是多么重要,还是较欣慰的。这还是得感谢自己的那颗蛀牙。还好及时去看医生。

我热爱技术,但不想技术就是自己的世界,我也热爱其他的东西,比如运动,动漫,摄影,旅游和吃,只可惜现在蛀牙了,好多好东西不能享受,实在是有点可惜。

有句话说了很多遍,但一直没有写下来,还是觉得应该记之于志。那既是,我一点也没有后悔读了4年的新闻学专业,本科这四年,让我开拓了视野,接触了很多未接触之物。那是我在计算机学院永远也无法体会到的。

暂时就写这么多吧,以后会勤劳更新,希望这个技术博客能够兴旺起来,hoho

 
W

关于pq-framework–个人php框架的开发tips

On 2011 年 07 月 06 日, in PHP, by 茗梓

pq框架是我个人正在进行开发的php小型框架,开发这个框架的宗旨是为了以后进行php应用开发能更加地迅捷,现在框架的雏形也已经浮出水面,但鉴于该框架还未成熟,所以还不能对外发布。急急忙忙拿出来恐怕贻笑大方,所以还得在温存一段时间。

一、框架目录:

Core/

Lib/

Theme/common/js

Theme/common/css

Theme/common/images

Theme/plugin

Theme/default/js

Theme/default/css

Theme/default/images

config.inc.php

index.php

其中index.php 和config.inc.php大家都懂的,就不说了,core存放框架必备的核心文件,Lib存放相关的类和函数文件

Theme是模板文件夹,common存放一些公共的文件,default是某一个具体应用的模板文件夹

 

2、核心类

Core下放置的核心文件

Core.php  整个框架的基础类

–App.php

–Model.php

–Controller.php

–View.php

DATABASE/   放置各个数据库驱动

 

Lib文件夹下有存放 类,函数,和包含文件 三种类型的文件

类文件 xxx.class.php

函数文件 xxx.func.php

包含文件  xxx.inc.php  (在被引入位置立即运行)

 

3、一些设计思路

1,没有全局变量(除去系统原有的)

2,简单上手,轻便化

3,模块化,应用化

4,各个模块低度耦合,通过核心加载各个模块

 
W

看到一个分页的算法

On 2011 年 06 月 14 日, in 其他, by 茗梓

由于之前自己也写过,但并不理想,今天偶然看到一个,豁然开朗

显示的页码数是$size, 当前的页数是$page, 总数是$total, 每页显示的条数是$page_size

$total_page = ceil($total/$page_size);

  1. $page_start = 1;
  2. $half = intval($size/2);
  3. $page_start = max(1, $page – $half);
  4. $page_end = min($page_start + $size – 1, $total_page);
  5. $page_start = max(1, $page_end – $size + 1);

标红的是亮点

 

 
W

php5.3.6在window下的安装和环境配置

On 2011 年 06 月 08 日, in PHP, by 茗梓

昨天重装了下系统,然后想把php升级到5.3版本,于是决定不用phpstudy这种安装包了,自己分别安装

php的版本是官网下载的  php-5.3.6-Win32-VC9-x86.msi(thread safe)

apache的版本是 apache_2.2.14-win32-x86-no_ssl

mysql的版本是 mysql 5.0.27 Setup

总的来说,php5.3的环境配置比5.2时代容易多了,不用再拷贝php.ini到window目录了,以下是我的安装步骤:

1,首先安装php,由于是在window环境下,一路next就行了,我是安装在了D盘(D:\PHP\)

2,再安装apache,也是装在D盘

3,安装mysql

4,接着就是配置apache了,接下来会详解。

(ps:无需再把php.ini复制到c盘system文件夹下了)

在详解apache配置前,说一下php5.3.6这个版本安装会遇到的问题:

php5.3.6这个版本已经没有vc6编译版本的了,所以直接下载vc9编译的版本即可,网上说vc9的不适合apache,那应该是针对php旧版本,现在已经没有这问题了。

接下来在apache配置文件里面添加对php的支持,在文件里添加下面几句

PHPIniDir “D:\PHP\”

LoadModule php5_module “D:\PHP\php5apache2_2.dll”

AddType application/x-httpd-php .php .phtml

Loadfile “D:\PHP\php5ts.dll”

接着重启apache即可

 
W

关于博客

On 2011 年 04 月 22 日, in 杂谈, by 茗梓

一开始建博客的时候,转载了一些文章,只是为了记录一些比较有用的东西,怕之后忘了以便可以回头来看看,但这样的话,就和书签没什么区别了,博客的意义也失去了。以后都会写一些自己的原创的东西。今天意外发现这个空间可以支持python,服务真是不错呢,改天试一下。

刚刚才发现可以在线改主题,于是立马改了些样式,把导航栏从右边挪到了左边,移动了下title,试着要把这个主题改成适合ie的,html5的主题,伤不起啊

 
W

晚上跑步时候的遐想:基于widget的网站架构

On 2011 年 04 月 14 日, in 杂谈, by 茗梓

这是今天晚上跑步时想到的一个东东,想法来源于现在的在线ui搭建工具和ecmall。

相比MVC的分层架构,可以把mv整合在一起,基于widget的网站架构。也就是把模型添加到widget,一个widget包括数据模型、页面逻辑和表现。ecmall的商城主页,就是完全由widget搭建起来的。ecmall也采用的mvc架构,只不过它的部分v,是由widget搭建起来的,每个widget包括页面表现,以及模型的接口。有的widget也包括一些业务逻辑,比如文件上传(这样说不知道对不对)等功能。

我想到的基于widget的网站架构,为了便于和前端ui结合起来。一个widget包括 数据模型,业务逻辑和表现等等。底层提供接口(恩,这个可以算是废话了),类似于一个电路板上面插拔元器件一样。

 

 
W

关于wordpress的主题

On 2011 年 04 月 14 日, in 杂谈, by 茗梓

刚刚和小徐子互换链接的时候,发现现在用的主题的文档类型是html5的,于是就在ie下面测试了一下,ie6-ie8全军覆没,ie9下勉强能看,少了些效果。火狐和chrome一切正常,再想着要不要换个兼容性好一点点主题,稍微浏览了一下,还是觉得这个最好看,最后决定:忽略那些用ie的

 
W

常量__FILE___解析

On 2011 年 02 月 12 日, in PHP, by 茗梓

在分析源码的时候,遇到PHP的常量__FILE__的问题了在网上查了一下,转载整理以下总结规律:

1)dirname(__FILE___) 函数返回的是脚本所在在的路径。
比如文件 b.php 包含如下内容:
<?php
$basedir = dirname(__FILE__);
?>
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。
变量$basedir 的内容还是b.php所在的那个文件夹的路径。
而不是变成a.php文件所在的目录。

而$_SERVER['PHP_SELF']正好相反,无论含有
<?php
echo $_SERVER['PHP_SELF']
?>
脚本是自己执行还是被引用,总返回执行脚本相对网站根目录的路径文件名

2)dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。
不会返回当前的文件名称。
dirname(__FILE__) 也可能返回一个 . (当前目录)
[原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下.
比如 WEB_ROOT 为: “C:/root/www/”
b.php文件路径为: “C:/root/www/b.php”.
3)使用方法提示,
如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回
当前目录的上级目录.这样重复就得到了它的上一级的目录.
4)包含得到上一级目录的文件
include(dirname(__FILE__).”/../filename

 
W

visual box安装Ubuntu的一些note整理

On 2011 年 01 月 28 日, in linux, by 茗梓

由于学校的dr.com和Apache有冲突,于是就建了个虚拟机,开发与测试都搬到了Ubuntu下,第一次安装的Ubuntu的9.10版本,按照建议用了8g的动态硬盘,之后就后悔了,8g根本就不够用,不久后10.4就出来了,于是重新建了个24g的动态硬盘来安装,说下两次安装过程中的小插曲

第一次装完9.10后,虚拟机的分辨率就只有800*600,非常小,在网上搜了下原因,原来要安装visual box的增强包,但我这边貌似出了点小bug,一点击菜单栏里的 安装增强功能,就弹出error,然后是一连串的英文,意思是不能加载某某光盘,这个错误直接导致我好几天都在800*600的小方格里运行ubuntu。

后来实在受不了了,又去网上搜了下教程,最后惊奇地发现,虽然我安装增强功能的时候,弹出 can’t mount的字样,但其实还是加载了增强功能包的。

于是就是下面几个步骤,来源于http://my.chinahtml.com/node/97

1、在“设备”菜单选择“安装增强功能”以载入VBoxGuestAdditions.iso

2、在“终端”内执行
==========
cd /media/cdrom
sudo sh ./VBoxLinuxAdditions-x86.run
==========

3、解决安装“安装增强功能”后无法自动捕获鼠标 修改xorg.conf

在“终端”内执行:
==========
sudo gedit /etc/X11/xorg.conf
==========

把以下内容粘贴到xorg.conf的最后
==========
Section “InputDevice”
Identifier “Configured Mouse”
Driver “vboxmouse”
Option “CorePointer”
EndSection
==========

这样鼠标就可以在host和guest拖来拖去 不用Right Ctrl

接着就是实现虚拟机系统与win7共享文件了,简单的来说,就是让win7里的一个文件夹当做虚拟机里一块分区加载进来,首先在虚拟机的菜单里选择 加载数据空间,选择外部系统的一个文件夹,尽量用英文名称命名文件夹,比如 d:\gongxiang 确认之后

终端下:sudo mount -t vboxsf gongxiang /mnt/shared

gongxiang 是你外部共享文件夹的名字,/mnt/shared是你选择在Ubuntu下加载此文件夹的文件夹,可自定。

关于visual box的更新,每次更新visual box之后,Ubuntu多多少少会出些问题,此时的问题就是重新安装增强功能,假如鼠标无法自动捕获,可以重新安装进行上面的步骤

 
W

require 和 include的区别

On 2011 年 01 月 28 日, in PHP, by 茗梓

二种方式提供不同的使用弹性

require 的使用方法如 require(“MyRequireFile.php”); 。这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。常用的函式,亦可以这个方法将它引入网页中。
include 使用方法如 include(“MyIncludeFile.php”); 。这个函式一般是放在流程控制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简单化。

当页面执行到require()时,如果require是一个PHP、HTML页面的话,这时就会马上转到去执行该页面了。而include,一般是用于include进来一些inc文件。比如说可以将你的网站的页头和页眉作为一个inc文件,这样在每个PHP文件里面再include进来。include实际只是将你要include的文件嵌入到当前页面当中。而require则是马上去执行你所请求的页面。

incluce在用到时加载,假如文件出错了,主程序继续往下执行
require在一开始就加载,假如文件出错了,主程序也停了
_once后缀表示已加载的不加载
php系统在加载php程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行。所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require。

这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。