| 磊 的个人资料Mrgaolei的Blog照片日志列表 | 帮助 |
|
2月11日 nginx for windows 的目录表示方法真令人捉摸不透为了配置主目录,我尝尽了无数方法 C:\web\ 等等 最后google了好几页,才发先是特殊的表示方法: /cygdriver/C/web 其中cygdriver代表windows目录结构,第二个C代表c盘。后面跟的就是路径了。 1月16日 PHP 计算权重算法假设有一堆服务器,我根据他们的配置给他们打分,想通过一个函数,随机的到一个服务器实例,当然不是百分百随机,而是配置越高的服务器得到几率越高,这就是权重。写了半天写出来了个算法,不过目前还有有一点Bug,就是权重值不能有重复的,否则重复的永远不会得到。 <?php * 权重DEMO $data = array( function checkWeight($data) { # 权重和 # 根据权重数排序 # 产生随机数,最小1,最大权重和 function swapvar(&$var1, &$var2) { 1月14日 PHP 5.2.1 参数类型不能定义成基础类型的问题在PHP 5.2.5中,可以按照如下方法声明函数 function getProductById(int $id); 而在PHP 5.2.1中,调用时则会报错,具体原因未知。 12月17日 PHP 中保存一个远程图片/文件到本地的更有效方法网上搜索了很多方法,大多数是:
这个方法不好,首先用ob_start()局限性大,况且必须写在第一行,否则高版本PHP无效,会将二进制输出到浏览器,也就是没有开启缓冲区,导致浏览器僵死。 其实最简单最安全的方法是: copy($url, “c:/123”); 从PHP 4.3.0开始,copy函数支持从网络上copy,所以用这个方法代替上述方法。前提是PHP配置文件需要打开fopen。 PHP 正则表达式学习小结(1)一、模式修正符号
二、任意空白符号\s
11月27日 hibernate 使用数据库字段默认值的问题解决 有个表 Table servers {integer id, string name, string ip, integer port default 10123, timestamp lastuse} 用hibernate 插入的时候,不给port赋值,想使用数据库结构的默认值10123,打死也不行,hibernate总是自己给他插入一个0。 网上搜了半天,什么not-null啊,.hbm.xml的default=""啊,还有update="false"等等,均无效 最后一高人说要:dynamic-insert="true" dynamic-update="true",也无效。 实在不行整个项目发过去,原来POJO类错了, 我的POJO类是private int port,而正确应该是private Integer port。 分析原因,int是primary type,没有null,而Integer是Object type,有null。 问题解决 11月19日 MySQL 的计算字符串长度函数 length() 今天要将一个临时表中的某个字段field1中200个汉字以内的字段导入另外一个表,不想用PHP,想直接一句SQL语句搞定。 开始尝试 select len('hello'); select strlen('hello'); 均不行 select length('hello'); 输出5,成了。 于是SQL语句出来了: insert into `table1` (field1) select field1 from `table2` where length(field1) < 400; -- 400字符代表200汉字 一句话搞定 11月14日 DreamweaverCS4使用1小时,便发现了coding10年来最期待的功能 【代码拆分】视图 经常写一个很长的代码的时候,尤其是javascript+html 或者 css+html 经常需要先看head,写一些代码 然后滚动到下面的body内,写一些代码 滚来滚去,浪费了好多时间 用该视图,可以同时看一个文件的两个位置,编辑一处,同时同步,太爽了。 8月11日 php通过ADO在Windows下操作Access数据库范例 <?php //读取mdb数据库例程 $conn = new com("ADODB.Connection"); $connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("data/db.mdb"); $conn->Open($connstr); $rs = new com("ADODB.RecordSet"); $rs->Open("select * from [table1]",$conn,1,1); while(! $rs->eof) { $f = $rs->Fields(1); echo $f->value; $rs->MoveNext(); } ?> 8月4日 MySQL导入导出数据库直接复制data目录的可行性方案 以前假如要备份某个数据库如cms,直接复制mysql/data/cms目录,恢复时拷贝回去是不行的,要么没有cms数据库,要么只能在show tables;时候看到表,而无法访问表资源。今天在高人指点下,确定了这种备份方法的局限性。 要向使用拷贝粘贴的方法备份数据库,必须满足如下几个要求: 1,所有表均为MyISAM 2,无论是备份还是恢复时,均要停掉mysql服务 3,删除ib_logfile0,ib_logfile1等文件 这种方法适用范围: 1,简单的数据库应用。没有用到视图,存储过程触发器等高级功能 2,不要求数据库实时在线的应用或者本机开发程序 3,数据量非常大,通过sql文件导入导出困难的时候 网站负载承受力差又一波——网民捐款挤瘫红十字会与基金会两大网站 这说明了什么? 系统架构师对一个Web项目来说多么重要。 4月18日 今天在rhel4下编译apache+php使其支持gd库的感想 以前一直认为是个很繁琐的过程,编译php的时候需要加一大堆的参数,弄不好就要出错。今天静下心来好好琢磨了一下,原来只要gd库安装好了,php编译的时候只需要--with-gd={GD库的路径}就可以了,无需--with-png-dir={} --with-jpeg-dir={}等等一大堆。 今天在装好gd库的前提下,只用了下面的简单命令,就装好了。 './configure' \ '--with-apxs2=/usr/local/apache2/bin/apxs' \ '--with-mysql=/usr/include/mysql/' \ '--enable-mbstring' \ '--with-gd=/usr/lib' 4月8日 写了一个PHP5的连接数据库类,支持分页,面向对象 <?php class Database { private $host = "localhost"; private $schema = "hgcms"; private $username = "hgcms"; private $password = "123456"; private $connected = false; private $conn = null; /** * Database 类 构造方法 * * @param string $host * @param string $schema * @param string $username * @param string $password */ public function __construct($host = null, $schema = null, $username = null, $password = null, $autoConn = true) { $host == null ? $host = self::getHost() : $host = $host; $schema == null ? $schema = self::getSchema() : $schema = $schema; $username == null ? $username = self::getUsername() : $username = $username; $password == null ? $password = self::getPassword() : $password = $password; self::setHost($host); self::setSchema($schema); self::setUsername($username); self::setPassword($password); if ($autoConn) self::connect(); } /** * connect() * */ public function connect() { if ($this->connected) return; $conn = @mysql_connect(self::getHost(), self::getUsername(), self::getPassword()) or die("Error Database unavaliable!"); self::setConn($conn); mysql_select_db(self::getSchema(), self::getConn()) or die("Error Select db!"); mysql_query("set names 'GBK'"); $this->connected = true; } /** * execute($sql) without resultset * * @param string $sql * @return resource */ public function execute($sql) { #echo "<h1>" . $sql . "</h1>"; $result = @mysql_query($sql, self::getConn()) or die("Cann't execute T-SQL : <br />\n $sql"); return $result; } /** * executeCount($sql) * * @param string $sql * @return integer */ public function executeCount($sql) { $sql = str_replace("*", "count(*) as count", $sql); $result = self::executeQuery($sql, 0); return $result[0]->count; } /** * executeQuery($sql) with resultset * * @param string $sql * @param integer $pageSize * @param integer $page * @return object */ public function executeQuery($sql, $pageSize = 20, $page = 1) { $array = array(); # 开始分页处理 if ($pageSize != 0) { $recordCount = self::executeCount($sql); $pageCount = intval($recordCount / $pageSize); if ($recordCount % $pageSize) $pageCount ++; if (isset($page) && intval($page) > 0){ $page = intval($page); } else { $page = 1; } if ($page > $pageCount) $page = $pageCount; $offset = $pageSize * ($page - 1); $limit = " limit $offset, $pageSize"; $sql.= $limit; } # 分页处理结束 $result = self::execute($sql); while ($rs = mysql_fetch_object($result)) { $array[] = $rs; } return $array; } /** * getHost() * * @return string */ public function getHost() { return $this->host; } /** * setHost($host) * * @param string $host */ public function setHost($host) { $this->host = $host; } /** * getSchema() * * @return string */ public function getSchema() { return $this->schema; } /** * setSchema($schema) * * @param string $schema */ public function setSchema($schema) { $this->schema = $schema; } /** * getUsername() * * @return string */ public function getUsername() { return $this->username; } /** * setUsername($username); * * @param username $username */ public function setUsername($username) { $this->username = $username; } /** * getPassword() * * @return string */ public function getPassword() { return $this->password; } /** * setPassword($password) * * @param string $password */ public function setPassword($password) { $this->password = $password; } /** * getConn() * * @return resource */ public function getConn() { return $this->conn; } /** * setConn($conn) * * @param resource $conn */ public function setConn($conn) { $this->conn = $conn; } } ?> 12月7日 因祸得福,昨天晚上突然无法上网,保修之后速度飙升500KB/s晚上挂上淘宝旺旺正在屋子里面溜达,听到室友一声不好,又上不了网了。进入无线路由管理,发现又得不到IP了,该死的中电飞华,每月总有那么几天上不了网。赶紧打电话申报故障。10-20分钟后能上了,室友又是一声,爽!我们的512K网络平时下载速度也就60左右,今天一下飙升到500KB/s,而且是稳定速度。我也赶快打开迅雷,速度保持在160KB以上,而那个室友500多的速度没有收到任何影响。看来他们重启服务器之后,忘了开限速软件了。 11月26日 搞定了Vista和Ubuntu双启动(Vista的bootmgr引导Ubuntu的grub)硬盘是全新的,先装了XP,然后装了Ubuntu,现在引导被grub抢了去,然后进入DOS键入fdisk /mbr,把引导全交给XP,修改boot.ini指向C盘的grub4dos,再将Ubuntu的/boot/grub/menu.lst复制到C:\,这样就做成了XP和Ubuntu双启动(ntldr引导grub4dos,然后grub4dos引导Ubuntu)以上操作没什么难度。主要是下面,Vista的bootmgr引导Ubuntu的grub。 首先进入WinPE,格式化C盘,安装Vista到C盘。重新启动之后,已经没有了Ubuntu的选项,只能进入Vista了。现在下载EasyBCD这个软件,截止到今天,最新版本是1.7.1,(http://neosmart.net/dl.php?id=1)。在Vista下安装并运行。选择“Add/Remove Entries”,在下面的“Add an Entries”面板中,选择“Linux”选项卡,Type是Grub,Name随便,Drive选择你安装Linux的/分区,再选中“GRUB isn't installed to the bootsector”复选框,最后点击“Add Entries”按钮。重启之后,便可出现Vista和Ubuntu的双启动菜单了。选择Ubuntu,进入Grub,下面的就明白了吧? 11月23日 Raid给我带来的麻烦太大了,决定今天删除Raid自从前些阵子新购置了一块跟现在一模一样的ST380811AS硬盘,用板载集成的Raid芯片组成了Raid0以后,给我带来了n多麻烦。 1,装XP以及2003系统的时候,认不到硬盘,Vista倒是不错,直接认。没办法只能用网友集成版XP了。 根据第二条现象,我有些怀疑我的板载Raid,因为真正做成了Raid,理论上从软件中是看不到硬盘的了,可是为什么Linux能发现我的两块硬盘呢?后来从网上搜集了一些资料,原来所有的主板集成Raid,都是半硬Raid,也就是说通过BIOS模拟,达到Raid效果,实际上数据的存储分割还是要通过CPU来计算,这样看来,我做Raid就亏本了。所以,决定今天晚上删除Raid,恢复两块硬盘普通模式。 分区模式初步计划为: Disk1:C盘20G,装Vista,D盘40G,装软件游戏,E盘15G,装Apache,MySQL等工具、开发的项目以及我的文档; 晚上回家就开始搞。 |
|
|