Web开发

PHP 基础

0

这是很简单的一个问题,但是我做错了。
我在这里这么强调他的简单,你肯定会比较注意他的陷阱。
但是,在你的代码里,会不会也有类似的情况呢?你还会注意到这些细节上的问题吗?
if ('x' == 0) {
$result = 'foo';
} else {
$result = 'bar';
}
echo $result; // $result = ?
?>

一次性答对的,说明你的基础比较扎实了。
你慢慢看我写的其他文章吧,我回去补课了……

解决 PHP UTF-8 编码问题

1
  1. PHP文件本身必须是UTF-8编码。不像Java会生成class文件,避免这个问题。
  2. PHP要输出头:header(“Content-Type: text/html; charset=UTF-8″)
  3. meta标签无所谓,有header所有浏览器就会按header来解析。(Leakon观点:我认为很有必要正确设置meta信息,搜索引擎会关心这个设置的)
  4. 所有外围都得用UTF-8,包括数据库、JavaScript、CSS。
  5. PHP本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码(基本上linux都装了,没装的话download、tar、make、make install,很简单的)
  6. my.cnf:
    [mysql]
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
    default-storage-engine=MyISAM
    在[mysqld]下加入:
    default-collation=utf8_bin
    init_connect=’SET NAMES utf8′
    (Leakon观点:默认存储引擎用MyISAM不一定很好,做数据存储我认为应该用InnoDB,根据数据,建MyISAM表用于查询操作,这种方案比较合适)
  7. 在需要做数据库操作的php程序前面加上
    mb_internal_encoding(‘utf-8′);
  8. create table最后边加上ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    (Leakon观点:我会选择COLLATE=utf8_general_ci,在对中文字段排序时,utf8_bin和utf8_general_ci结果是不一样的)
  9. phpMyAdmin/config.inc.php
    $cfg['DefaultCharset'] = ‘utf-8′;
    $cfg['RecodingEngine'] = ‘iconv’;
  10. phpAdmin导出数据时
    把”二进制区域使用十六进制显示”的勾去掉
    (Leakon观点:9、10两步似乎是针对旧版的phpMyAdmin,我用的是2.10.3,可以选择各种连接编码,不必每次改源文件)

以上是我从其他网站找到的PHP编码问题解决方案,有些帮助,并加上了自己的建议,请您指正。

IE 无法打开 pdf rar http协议 cache-control

0

前两天在开发过程中遇到一个问题,用php做了一个下载文件的程序。

点击文件链接,如果是pdf、rar等类型的文件,浏览器会询问是打开还是保存。如果选择保存,把文件保存到硬盘上,就可以正常打开,但选择打开,就会出现问题,IE会提示“文档已损坏”。

反复检查问题,包括检查header的Content-type,都是正常的,没有问题,而且用Firefox不管是选择打开还是保存都正常。

以为是浏览器的问题了,后来,试着改了一下http头,加上了header(“Cache-Control:”),就可以解决了,里面不能使NO-CACHE。

看来在细节上,Firefox比IE考虑得更周到一些!

CSS 图片 垂直 布局 与文字对齐 vertical-align

2

在 HTML 代码中,有时会需要在文字旁边加上一个图标。

默认情况,是图片置顶对齐,文字置底对齐,这样一来,文字和图片排列在一起就很难看,如图:

Vertical Align

代码是:

 更多

查一下CSS2手册,找到vertical-align的属性,可接受的参数值如下:
baseline |sub | super |top |text-top |middle |bottom |text-bottom |length

baseline :  将支持valign特性的对象的内容与基线对齐
sub :  垂直对齐文本的下标
super :  垂直对齐文本的上标
top :  将支持valign特性的对象的内容与对象顶端对齐
text-top :  将支持valign特性的对象的文本与对象顶端对齐
middle :  将支持valign特性的对象的内容与对象中部对齐
bottom :  将支持valign特性的对象的文本与对象底端对齐
text-bottom :  将支持valign特性的对象的文本与对象顶端对齐
length :  CSS2 由浮点数字和单位标识符组成的长度值 | 或者百分数。可为负数。定义由基线算起的偏移量。基线对于数值来说为0,对于百分数来说就是0%。目前IE5尚不支持。请参阅长度单位

为了布局更好看,我选择了text-bottom,让文字与图片在同一水平线上,效果好多了:

Vertical Align

代码如下:


 更多

只是在img标签中加入了vertical-align的css定义。

rss.png图片是网上找的,如果你想要,那就下载我提供的这个链接:

http://down.leakon.com/software/2007/10/rss.png

RSS

CVS 相关

0

告诉 CVS 仓库放在哪里

有几种方法告诉 cvs 仓库的位置。一种方法是通过命令行显式指名仓库,具体方法是用 -d(表示“目录”)选项:

     cvs -d /usr/local/cvsroot checkout yoyodyne/tc

你也可以给环境变量 $CVSROOT 设置绝对路径来代表仓库的位置,在本例中 $CVSROOT 被设置成 /usr/local/cvsroot。对于 cshtcsh 用户,在 .cshrc.tcshrc 文件中加入下面语句即可设置 $CVSROOT 的值:

     setenv CVSROOT /usr/local/cvsroot

shbash 用户则应在他们的 .profile 或者 .bashrc 加入下面语句:

     CVSROOT=/usr/local/cvsroot

     export CVSROOT

-d 指定的仓库将跨越环境变量 $CVSROOT。一旦你从仓库里检出了一份工作副本,那么它将记住仓库的位置(信息被记录在工作副本的 CVS/Root 文件里)。

-d 选项和 CVS/Root 文件都会跨越环境变量 $CVSROOT。如果 -d 选项和 CVS/Root 文件指定的仓库位置不同的话,则使用前者。当然,为了正确操作它们应该是引用同一仓库的两个方法。

xampp xdebug configure phpize php-config

9

看标题,不太会理解这篇文章的主题,只不过是有着微妙关联的几个软件,按照时间顺序发生在了我的身上。

xampp,是一个集成的 apache + php + mysql + … 的开发环境,如果你是做 web 开发,对各种服务器软件的安装比较头疼,尤其是在 unix 下编译和配置各种软件没有经验的时候,这个软件就能帮大忙了。只要下载回去,解压到 /opt 目录下,然后

#/opt/lampp/lampp start 即可!

/opt/lampp/htdocs 就是你的 web 根目录,所有的环境都默认配好了。

通常,我都是在 vmware 里安装一个 FreeBSD 6,然后装这个 xampp,就立刻有了一个开发环境。

后来, 需要用 xdebug 调试 php 程序,Windows 版的超级简单,下载一个 DLL 文件即可,但 Unix 版的必须得在本机环境中编译才行。

以前编译过 apache 和 php 等软件,第一步都是在安装目录执行 ./configure ,但解压完 xdebug 发现根本没有这个文件,上网站查文档,发现需要执行 phpize。

百度了一把,大概了解到,phpize 是根据源码包中的好像是 config.m4 这个文件,生成 configure 脚本的,目前来说,我也就能领悟到这个层次了。还好,我查了 /opt/lampp 目录下面,有这个 phpize 文件,可以执行。执行完了,目录下面果然出现了 configure 文件,这个 configure 文件会调用 php-config。

php-config 可能就是获得当前 php 的各种环境设置变量的,在编译 xdebug 这种 php 扩展的时候会用到。

用 phpize 和 php-config 做好 configure 后,就要用 make 编译 xdebug 了。

这个时候,问题来了,屏幕刷刷地显示了几屏错误信息后,停在一个严重错误的提示信息下面 。

说是 xdebug 的语法错误。

我想,不会吧,这么出名的开源软件,都是经过很多测试的,不至于编译都过不去。然后自己检查前面的每一项错误信息,都是提示一些  .h  文件找不到,关键的几行是 php/include 目录,编译程序要在这个目录下面找文件,但是这个目录不存在!

这个提醒了我,由于我的  apache 和 php 环境是 xampp 打包的,目录结构和默认的不一样,而且很多文件也没有在系统中注册,是无法自动找到的。

我到朋友的服务器上测试了一下,他的软件都是一项一项安装的,基本都是默认目录。果然不出所料,在那里配置和编译都没有问题。

大概找到了问题的根源,然后在自己的虚拟机上重新安装了 apache 和 php,都是默认安装,然后,重新编译  xdebug,这回可以顺利通过了!

ColorSpy 屏幕取色 绿色软件

0

软件的功能就不多说了,做 Web 开发经常会用到的,保存在服务器上,随时可以下,省得到处找了。

下载链接:ColorSpy

设置 innerHTML 属性 导致 未知的运行时错误 IE bug

2

在用 Javascript 更改 HTML 代码的时候,经常会用到某个对象的 innerHTML。在读写标签内的代码或字符串时非常方便。

但 IE 对这个属性的支持不太好,经常容易报出 “未知的运行时错误”,而同样的操作,在 FireFox 和 Opera 下面就都没问题。

到百度和 Google 查了下,发现是 IE 浏览器下,对 <table>、<tbody> 和 <tr> 等标签的 innerHTML 属性进行写操作时会报错。

应该是 IE 处理不当造成的。

目前没有很好的解决办法,只能采取改变 HTML 结构的方式,也就是说,不要对 <table> 等标签应用这个属性,改为对 <div>、<span> 和 <p> 等标签,就没问题了。

比如,运行下面的代码会报错:

Hello Leakon!

改变一下实现方式,就没问题了:

Hello Leakon!

MySQL 数据导出 数据导入 备份 还原 编码 字符集

0

数据导出

完整数据库备份
mysqldump -uroot -p123456 –opt –default-character-set=gbk database_name > database_dump.sql

注意:

1 加上 “--opt” 参数,就相当于同时加上了如下参数:
–add-drop-table –add-locks –create-options –disable-keys –extended-insert –lock-tables –quick –set-charset

2 必须指定字符集
–default-character-set=gbk
通常选择 gbk、utf8 或 latin1

数据导入

mysql -uroot -p123456 database_name < database_dump.sql

注意:

1 导入导出的字符集应该一样(讨论A)

关于备份文件(讨论A)

用文本编辑器打开 database_dump.sql 文件,在头部会有如下一行内容:

/*!40101 SET NAMES gbk */;

其中的 gbk 就是导出时指定的字符集,在导入到新数据库的时候,这条语句会告诉 MySQL 服务器当前的连接环境使用这个指定的字符集。

简单总结:

为了整体环境一致,也为了维护工作更简单,我建议如下几点:

1 在设计数据库、表、字段的时候,要全部保持一致的字符集,例如,我们全部都用 utf8;
2 在 PHP 和 MySQL 建立连接的时候,用 "SET NAMES utf8" 语句设置连接环境;
3 在 Web 页面的 HTML 代码中加入如下代码:

4 保存程序和模板文件的时候也用统一的 utf8 字符集保存

保证了上述 4 点,我们在开发 Web 应用中,就不会遇到任何编码的问题了。

配置rewrite和.htaccess

0

一、配置 apache 的 httpd.conf:
1.3.x 版本:
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c

2.x 版本:
LoadModule rewrite_module modules/mod_rewrite.so

二、虚拟主机配置:

DocumentRoot “/www/abc.com”
ServerName www.abc.com


Options FollowSymLinks
AllowOverride Options FileInfo

Go to Top