wampserver 不能显示 icons 里的图片

环境:win7, wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe 安装位置为:D:/wamp/

在网站目录下,我有一个文件夹 my-folder 里面有一些文件,因为没有 index.php index.html index.htm 等文件,所以 apache 列出了 my-folder 下的所有文件,但是,问题在于,没有显示前面的图片,很难看。

查看 apache error 文件发现提示错误:

[Wed May 29 22:58:43 2013] [error] [client 127.0.0.1] client denied by server configuration: C:/Apache2, referer: http://localhost/my-folder/

访问 http://localhost/icons/ 显示 403 无权限。

很无解,因为我的 wampserver 安装在 D 盘,相关配置文件也在 D:\wamp\bin\apache\apache2.2.22\conf 文件夹下,为什么提示错误说在 C:/Apache2。

第一次遇见这个问题,我尝试搜索了一番,无果。今天再搜索,竟然找到问题所在了。

下面解决方案来自 http://serverfault.com

To fix the icon problem, I had to edit httpd-autoindex.conf located in \bin\apache\apache2.2.22\conf\extra

I changed

Alias /icons/ "c:/apache2/icons/"

to

Alias /icons/ "D:/wamp/bin/apache/apache2.2.22/icons/"

and

<Directory "c:/apache2/icons">

to

<Directory "D:/wamp/bin/apache/apache2.2.22/icons/">

The icons will now display as per usual.

Many thanks to Ladadadada for pointing me in the right direction!

storytlr 支持搜索标题和内容

storytlr 搜索很奇怪,比如我有一篇文章,标题为“QQ for Linux 新版本终于发布了”,内容为“发布了发布了等等等。。。。。很多字符哈哈哈”,我在搜索框里搜索以下内容可以搜到这篇文章:“Linux”、“QQ for Linux”、“新版本终于发布了”,但是搜索以下内容搜不到这篇文章:“Linu”、“QQ for”、“版本”、“新版本终于发布”。这就奇怪了,于是查看代码,在源文件

./protected/application/admin/models/Data.php

的 236 行可以看到,采用的搜索方式是 MATCH,并不是 LIKE,之前没见过 MATCH,于是查看 MySQL 官网,点击这里这里

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is four characters.

也就是说会省略小于等于 4 个字符的词会省略,所以搜索“QQ for” 搜索不到。

The FULLTEXT parser determines where words start and end by looking for certain delimiter characters; for example, “ ” (space), “,” (comma), and “.” (period). If words are not separated by delimiters (as in, for example, Chinese), the FULLTEXT parser cannot determine where a word begins or ends.

中文词与词之间没有像英文那样有个空格隔开,所以 “新版本终于发布” 和 “新版本终于发布了” 并没有匹配,它认为是两个不同的词。

找到问题所在了。为了满足我的要求,我改代码为使用 LIKE 进行搜索,并且,它默认只搜索标题,不搜索内容,我对 SQL 语句作了如下改动。

Data.php 文件的 234 到 242 行内容为:

$sql = "SELECT d.id, d.source_id, d.service, UNIX_TIMESTAMP(d.timestamp) as timestamp, d.is_hidden, d.user_id, d.comment_count, d.mention_count, d.tag_count, d.slug "
		. "FROM {$service}_data t LEFT JOIN data d ON (t.id = d.id AND t.source_id = d.source_id) "
		. "WHERE MATCH($index) AGAINST(:term) AND t.source_id= :source_id "
		. ((!$show_hidden) ? "AND is_hidden = 0 " : " ")
		. "ORDER BY timestamp DESC ";

$data = array(":term" => $term, ":source_id" => $source_id);

$stmt   = $this->_db->query($sql, $data);

更改为:

$sql = "SELECT d.id, d.source_id, d.service, UNIX_TIMESTAMP(d.timestamp) as timestamp, d.is_hidden, d.user_id, d.comment_count, d.mention_count, d.tag_count, d.slug "
		. "FROM {$service}_data t LEFT JOIN data d ON (t.id = d.id AND t.source_id = d.source_id) "
		. "WHERE (title LIKE '%{$term}%' "
		// 下面这行代码是为了搜索 content 字段,有些表没有 content 字段,所以先进行一个判断
		. (($service == 'rss') ? "OR content LIKE '%{$term}%' " : "")
		. ") AND t.source_id= {$source_id} "
		. ((!$show_hidden) ? "AND is_hidden = 0 " : " ")
		. "ORDER BY timestamp DESC ";
$stmt   = $this->_db->query($sql);

我无视了 search 函数的 $index 参数,直接在 SQL 语句里用 title 替代了。

暂时一切运行正常。可以正常搜索,可以搜索文章标题和内容。

对于 MATCH AGAINST ,如果我理解有误,请看官指点。如果有更好的解决方法,请告之~

storytlr 登录出现问题,删除 apc 后正常

昨天开始,安装在服务器上的 storytlr 出现问题,登录的时候,页面不给任何反馈,查看 apache 错误日志也没有错误产生,查看程序自带的错误记录,也没能看出任何问题。但是我本地也安装来一个 storytlr 正常运行,没有出现这个问题,代码都是一样的,按说不应该啊。于是我对比来一下本机和服务器 phpinfo() 的输出,发现服务器多加载一个 apc 扩展,抱着试一试的态度,我将服务器的 php-apc 扩展删除了,重启 apache2 服务,正常,搞定!不知道为什么会这样,我对 storytlr 代码不熟,对它使用的 zend framework 也没用过,还真有点没底呢,不过现在问题解决了就好。

为什么会出现这个问题呢?

storytlr 安装出现错误

出现错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘) ENGINE=MyISAM DEFAULT CHARSET=utf8’ at line 19

经检查出错文件是:

protected/install/database/update/003/add_mentions_table.sql

该 SQL 语句多了一个逗号,将 UNIQUE KEY `item` USING BTREE (`source_id`, `item_id`, `url`), 后的逗号去掉即可。

bash启动脚本

本文系转载,原文网址:http://learn.akae.cn/media/ch31s04.html

4. bash启动脚本

启动脚本是bash启动时自动执行的脚本。用户可以把一些环境变量的设置和alias、umask设置放在启动脚本中,这样每次启动Shell时这些设置都自动生效。思考一下,bash在执行启动脚本时是以fork子Shell方式执行的还是以source方式执行的?

启动bash的方法不同,执行启动脚本的步骤也不相同,具体可分为以下几种情况。

4.1. 作为交互登录Shell启动,或者使用–login参数启动

交互Shell是指用户在提示符下输命令的Shell而非执行脚本的Shell,登录Shell就是在输入用户名和密码登录后得到的Shell,比如从字符终端登录或者用telnet/ssh从远程登录,但是从图形界面的窗口管理器登录之后会显示桌面而不会产生登录Shell(也不会执行启动脚本),在图形界面下打开终端窗口得到的Shell也不是登录Shell。

这样启动bash会自动执行以下脚本:

首先执行/etc/profile,系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,可以写在这个脚本里

然后依次查找当前用户主目录的~/.bash_profile、~/.bash_login和~/.profile三个文件,找到第一个存在并且可读的文件来执行,如果希望某个设置只对当前用户生效,可以写在这个脚本里,由于这个脚本在/etc/profile之后执行,/etc/profile设置的一些环境变量的值在这个脚本中可以修改,也就是说,当前用户的设置可以覆盖(Override)系统中全局的设置。~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动脚本,如果没有则执行~/.profile,是为了和sh保持一致。

顺便一提,在退出登录时会执行~/.bash_logout脚本(如果它存在的话)。

4.2. 以交互非登录Shell启动

比如在图形界面下开一个终端窗口,或者在登录Shell提示符下再输入bash命令,就得到一个交互非登录的Shell,这种Shell在启动时自动执行~/.bashrc脚本。

为了使登录Shell也能自动执行~/.bashrc,通常在~/.bash_profile中调用~/.bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

这几行的意思是如果~/.bashrc文件存在则source它。多数Linux发行版在创建帐户时会自动创建~/.bash_profile和~/.bashrc脚本,~/.bash_profile中通常都有上面这几行。所以,如果要在启动脚本中做某些设置,使它在图形终端窗口和字符终端的Shell中都起作用,最好就是在~/.bashrc中设置。

下面做一个实验,在~/.bashrc文件末尾添加一行(如果这个文件不存在就创建它):

export PATH=$PATH:/home/akaedu

然后关掉终端窗口重新打开,或者从字符终端logout之后重新登录,现在主目录下的程序应该可以直接输程序名运行而不必输入路径了,例如:

~$ a.out

就可以了,而不必

~$ ./a.out

为什么登录Shell和非登录Shell的启动脚本要区分开呢?最初的设计是这样考虑的,如果从字符终端或者远程登录,那么登录Shell是该用户的所有其它进程的父进程,也是其它子Shell的父进程,所以环境变量在登录Shell的启动脚本里设置一次就可以自动带到其它非登录Shell里,而Shell的本地变量、函数、alias等设置没有办法带到子Shell里,需要每次启动非登录Shell时设置一遍,所以就需要有非登录Shell的启动脚本,所以一般来说在~/.bash_profile里设置环境变量,在~/.bashrc里设置本地变量、函数、alias等。如果你的Linux带有图形系统则不能这样设置,由于从图形界面的窗口管理器登录并不会产生登录Shell,所以环境变量也应该在~/.bashrc里设置。

4.3. 非交互启动

为执行脚本而fork出来的子Shell是非交互Shell,启动时执行的脚本文件由环境变量BASH_ENV定义,相当于自动执行以下命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动脚本的文件名,source这个脚本。

4.4. 以sh命令启动

如果以sh命令启动bash,bash将模拟sh的行为,以~/.bash_开头的那些启动脚本就不认了。所以,如果作为交互登录Shell启动,或者使用–login参数启动,则依次执行以下脚本:

/etc/profile
~/.profile

如果作为交互Shell启动,相当于自动执行以下命令:

if [ -n "$ENV" ]; then . "$ENV"; fi

如果作为非交互Shell启动,则不执行任何启动脚本。通常我们写的Shell脚本都以#! /bin/sh开头,都属于这种方式。

国内的 C 语言教材真是坑人啊

普遍以VC6作为开发环境,VC对C标准支持低。并且一开始就用IDE根本就不能很好的理解程序编辑编译链接的关系。

今天重新学了一下C,是一本翻译的国外的教材,感觉很不错,gdb很强大。以前上大学那会儿那知道这些啊?我操~害人不浅的垃圾教材!

解决 Win 7 apache 局域网内其他计算机不能访问的问题

症状:

安装  Apache 后,本地 http://localhost, http://127.0.0.1, http://192.168.1.X,可以正常访问,但是同局域网内其他计算机输入本机IP地址却不能访问。

解决:

猜测是防火墙的问题,于是关闭防火墙,可以访问。因此你偷懒的话可以直接在控制面板-Windows防火墙里将防火墙关闭即可。

另一种解决方式是,给防火墙增加一条规则允许 80 端口被访问,具体设置方法如下:

1、在 控制面板 > 系统和安全 > Windows防火墙中 左侧点击 高级设置
2、点击左侧 入站规则,然后点击右侧的 新建规则,然后在弹出的入站规则向导中依次是
规则类型:端口
协议和端口我们选的是 TCP 协议和 特定本地端口(例:80)
操作:允许连接
何时应用规则中选中所有(域、公用、专用)
输入名称和描述
点击完成,就OK了。
经过以上设置,同局域网的其他计算机就可以用你的IP地址访问你搭建的服务器了。

推荐拼音输入法英库

搜狗输入法会经常弹出小窗口问是否要换皮肤,烦不胜烦啊。其实QQ拼音也不错,今天在论坛上看到一个网友推荐英库输入法,我已经安装使用,效果不错,默认界面看起来很小清新。

英库输入法 微软英库拼音输入法运用微软亚洲研究院的创新研究成果,新的版本优化了核心引擎,系统更加稳定高效,加上云端服务器的无限量存储和计算能力,还有30多万词条的中文词库和新词热词,大幅提升输入的准确率,中英文混合一次输入,最新的电视剧名?网络流行语?赛季新秀?都来试试看吧!