php 编译支持ImageMagick

首先你要先成功的编译一次php
在phpbin目录中会产生 phpize 这个文件,是待会咱们要使用到的。

按照网上说的方法,试验了N遍总是失败。
总是提示:
Cannot find config.m4.
Make sure that you run ‘/usr/local/php/bin/phpize’ in the top level source directory of the module

无奈,去 官方网站
然后进入 program interface 的链接

找到php的部分,点击进入,下载了 magickwand-0.1.8.tar.bz2

然后再次按照网上的方法

解压缩到php源代码目录的ext目录下
然后cd进去
/usr/local/php/bin/phpize

成功了。。。

然后cd到php源代码目录,也就是 cd ../../
rm -rf ./configure
再执行: ./buildconf –force

rebuild的时候可能会出现
autoheader: WARNING: Using auxiliary files such as `acconfig.h’, `config.h.bot’
autoheader: WARNING: and `config.h.top’, to define templates for `config.h.in’
autoheader: WARNING: is deprecated and discouraged.
autoheader:
autoheader: WARNING: Using the third argument of `AC_DEFINE’ and
autoheader: WARNING: `AC_DEFINE_UNQUOTED’ allows to define a template without
autoheader: WARNING: `acconfig.h’:
autoheader:
autoheader: WARNING: AC_DEFINE([NEED_FUNC_MAIN], 1,
autoheader: [Define if a function `main’ is needed.])
autoheader:
autoheader: WARNING: More sophisticated templates can also be produced, see the
autoheader: WARNING: documentation.
上面大额这些错误,不用去管它。。。

ok,现在和你上次编译php没有什么区别了,只是在编译的参数中再加上 –with-imagick=/usr/local/imagemagick 就好了

mysql 编译时增加字符集的配置

如果你在你的my.cnf文件中增加了 default-character-set = gbk 但是当你无法启动mysql,错误日志里面报告类似于这样的: 060625 01:37:00 mysqld started
^G/usr/local/mysql/libexec/mysqld: File ‘/usr/local/mysql/share/mysql/charsets/gb2312.conf’ not found (Errcode: 2)
^G/usr/local/mysql/libexec/mysqld: Character set ‘gb2312′ is not a compiled character set and is not specified in the ‘/usr/local/mysql/share/mysql/charsets/Index’ file
060625 01:37:00 mysqld ended 错误的时候,

目前我的解决方法是重新编译mysql,在编译的参数中加入–with-extra-charsets=gbk,gb2312 便可解决此问题。

解决方法参考: MYSQL完全安装使用指南
下面付上原文
[quote]
mysql安装笔记

cloud/2003.10.10
mail:[email protected]
欢迎转载,转载请保留上述信息,谢谢

学习了很长时间的linux,有必要做一下整理笔记了,以下是mysql的安装笔记,和常见的一些使用方法。
因我喜欢调试优化系统,所以在编译安装时使用了一些选项增加编程后程序的执行效率,有些可能我理解有错,希望大家指出.

●安装mysql
# tar zxvf mysql-4.0.14.tar.gz -C /setup
# cd /setup/mysql-4.0.14
# groupadd mysql
# useradd mysql -g mysql -M -s /bin/false
# ./configure –prefix=/web/mysql 指定安装目录
–without-debug 去除debug模式
–with-extra-charsets=gb2312 添加gb2312中文字符支持
–enable-assembler 使用一些字符函数的汇编版本
–without-isam 去掉isam表类型支持 现在很少用了 isam表是一种依赖平台的表
–without-innodb 去掉innodb表支持 innodb是一种支持事务处理的表,适合企业级应用
–with-pthread 强制使用pthread库(posix线程库)
–enable-thread-safe-client 以线程方式编译客户端
–with-client-ldflags=-all-static
–with-mysqld-ldflags=-all-static 以纯静态方式编译服务端和客户端 –with-raid 激活raid支持

# make
# make install
# scripts/mysql_install_db 生成mysql用户数据库和表文件
# cp support-files/my-medium.cnf /etc/my.cnf copy配置文件,有large,medium,small三个环境下的,根据机器性能选择,如果负荷比较大,可修改里面的一些变量的内存使用值
# cp support-files/mysql.server /etc/init.d/mysqld copy启动的mysqld文件
# chmod 700 /etc/init.d/mysqld
# cd /web
# chmod 750 mysql -R
# chgrp mysql mysql -R
# chown mysql mysql/var -R
# cd /web/mysql/libexec
# cp mysqld mysqld.old
# strip mysqld
# chkconfig –add mysqld
# chkconfig –level 345 mysqld on
# service mysqld start
# netstat -atln
看看有没有3306的端口打开,如果mysqld不能启动,看看/web/mysql/var下的出错日志,一般都是目录权限没有设置好的问题
# ln -s /web/mysql/bin/mysql /sbin/mysql
# ln -s /web/mysql/bin/mysqladmin /sbin/mysqladmin
# mysqladmin -uroot password “youpassword” #设置root帐户的密码
# mysql -uroot -p
# 输入你设置的密码
mysql>;use mysql;
mysql>;delete from user where password=””; #删除用于本机匿名连接的空密码帐号
mysql>;flush privileges;
mysql>;quit

●安装DBI和DBD for mysql 用于提供perl访问mysql数据库的接口规范,请确认你已经安装了perl,一般默认系统都装上了

# cd /setup
# tar zxvf DBD-mysql-2.9002.tar.gz -C /setup
# tar zxvf DBI-1.38.tar.gz -C /setup
# cd DBI-1.38
# perl Makefile.PL
# make
# make test
# make install
因为有的perl程序中perl的路径是/usr/local/bin/perl,而红帽系统默认是/usr/bin/perl,所以最好做一个连接,保证兼容性
# ln -s /usr/bin/perl /usr/local/bin/perl
# cd ../DBD-mysql-2.9002
生成安装配置文件需要在perl Makefile.PL后添加一些参数,比较麻烦,我们可以通过添加一个到/web/mysql/bin/mysql_config这个程序的连接解决问题
系统会自动寻找这个命令生成安装所需要的数据库参数
# ln -s /web/mysql/bin/mysql_config /sbin/mysql_config
# perl Makefile.PL
# make
# make instll (这里make test我总是运行一半就出错,但是安装后是可以运行mysql目录下的测试脚本,不知道3.x的mysql如何)
现在你可以运行测试脚本了,不过速度很慢,挂在后台好了
# perl /web/mysql/sql-bench/run-all-tests –user=root –password=”youpassword”

附:
●mysql常见的一些有用的选项和命令
mysqld —–开启日志支持
–log
–log-update
–log-long-formart
●mysql
grant all on database.* to user identified by “password” 新建一user用户,赋予其database数据库的所有权限
revoke all on database from user 移除user用户在database数据库上的所有权限
mysql -uroot -p –one-database databasename
●mysqladmin
mysqladmin flush-logs 命令mysqld重新打开一个新的日志文件,就是清空老日志文件,相当于轮回了
●mysqldump
–add-drop-table 导出sql语句时添加droptable if exists语句
–quick 快速导出
–opt 优化选项(推荐)
●myisamchk
检查表选项
–extend-check 扩展检查
–medium-check 速度比较折中的一个检查选项
修复表选项
–recover 修复表文件
–safe-recover 安全修复表文件,比–recover要慢
修饰修复表项
–force 强制清除上次的临时文件
–quick 只根据素引文件的内容进行修复
●mysql的管理
可以使用phpmyadmin(需要php的环境支持)和mysqlcc(linux图形界面支持,WINDOWS系统支持)
[/quote]

NP写给互联网上从业的Web程序员

程序员是一个脆弱、特殊的群体,以各种方式生存在有01的世界里。

程序员的特点:
狂躁,但是有修养
随和,但是疯癫
肯向任何人学,但是不服任何人
守约,但是不守时
感情丰富,但是单纯
……
Web程序是程序员中的一个别具特色的群体,他们有着和HTTP协议类似的无状态性、无序性、不可预测性。我这么说,是因为web程序员的出身、成分、学习途径、从业历程多种多样。Web程序员,是现今IT从业者中最具活力也最复杂的最可爱的一群人。

相比于传统的“学院派”程序员(请暂时允许我这么说),Web程序员的普遍出身都比较“贫寒”,这是行业事实,尤其是处于刚入行不久的这一大部分人中,有很多是没有上过大学,受过正常高校教育体制折磨的。高中、专科甚至初中学历的程序员比比皆是,他们通过自己的努力,掌握了一定的技能,取得了一项不错的工作。

“学院派”包括很多集团性质的大规模开发活动,外包项目,基于底层或硬件的开发,研究性的开发等等,体现在开发工具上多集中于C、C++、Ada等学院气息浓厚的语言,Java在某种程度上也可以算作其中,他们的特点是基础牢固、严谨、重视内在,又有些枯燥的味道。Web开发更倾向与灵活、开发效率和表现形式。

然而由于各种原因,很多高等学府中的学生有一种很不正确的误解,认为Web开发是低于传统开发的,没有水平的,浮躁的,实在没工作的表现,从而看不起它。相对的,很多Web从业者认为大学生毕业后去的大公司的工作是死板的,缺乏创造性的,枯燥的,没有真才实学的,更认为大学里学不到什么,从而也看不起,甚至仇视大学教育(包括一些受过高等教育的人)。这是一个非常现实的矛盾。

当然这个矛盾只是集中没有毕业的学生和从业时间不长的人群中,等到工作一段时间之后,相互接触得多了,都会觉得自己原本并没有体验到对方的真实内涵。传统开发中有很多富有创造性富有激情的内容值得互联网行业借鉴,而Web开发中千奇百怪的想法和时刻面对亿万用户的几乎无法预测的使用环境都是传统开发者觉得羡慕不已的,而两者结合更是体现了学院的严谨、知识的重要、来自用户的成败决定性,比如搜索引擎,比如企业级的B/S分布系统。

一个精熟C语言并有着丰富经验的人,转行从事Web开发是比较快的,甚至可以说是如鱼得水,但是一个做了两年PHP而又没有什么其它的语言背景的程序员,在自身发展上就会受到阻碍了。任何一门语言上升到一定高度,它所面对的问题已经不再是这门语言本身。语言只是工具,使用工具的方法才是生产效率的决定因素。熟习了语言之后,慢慢地在工作中会碰到诸如执行效率、存储方法、算法优化等更多偏向分析而不是代码艺术的内容。通常对于一个没有受过系统的计算机教育,没有受过自认为“没用”的大学培养的程序员,在这些问题面前表现都是比较盲目、无助的。很多问题需要严整的数学分析,查阅参考资料需要比较好的英文水平和数学基础,聪明一点的会马上意识到大学基础教育的重要性,多半都会后悔上课睡觉了,呵呵~~

一些人对于分析方法等抱着不以为然的态度,认识多是浮于表面,比如对于数据结构和算法的淡漠,觉得在Web开发中极少或不可能触及到这些内容。诚然,现在的Web开发脚本语言都有丰富的函数,灵巧的使用方式,多数已经不需要再像C语言一样声名变量、创建指针、计算内存地址、写排序算法。而且基于互联网的不可预知性,也很难有一个完美的算法解决所有情况下的问题,比如排序。程序员在这种情况下都是使用语言内置的各种功能在完成操作,当然我不是说什么都要从头开始自己写,那是莽夫做的傻事,但是我想,既然用了,多多少少也应该知道函数是怎么回事。自己写的function是函数,系统提供的就不是函数了么?不求看懂源码,至少也应该知道它是在做什么。每天追求执行效率和页面执行时间的程序员,更是忽略了系统函数本身的效率问题,把所有的系统函数都想象成了汇编中的NOOP这种单元操作。

Web开发中碰到的算法问题很少么?举一个小例子:iForum论坛(前年我在上海看过)中记载用户组权限的方法,是在数据表中插入一条类似11110010011100的字符串,每一位代表一种操作,1就是表示有权限进行操作,0就是没有。这种方式很简单实用,但是它受到Varchar的长度限制(虽然255种操作已经足够复杂了),而且字符串的计算效率又是低于数字,那么有没有想过这种算法的本质是什么呢?有没有想过优化它呢?

中国古代有一套数学理论叫做“盈不足术”,例如,有十只盒子,第一个盒子里放一个盘子,第二个盒子里放两只,第三个盒子里放四只,第四个盒子里放八只……第九个盒子里放256只,第十个盒子放512只,即第N只箱子里放2^(N-1)只盘子,一共1023只。那么命题如下:在1023这个数字之内,任何一个数目都可以由这十只盒子里的几只组合相加而成(大家自己算算就知道了……呵呵)。
那么1、2、4、8、16、32、64、128、256、512这个序列为什么有这么个魔力?这个数列的特点:1、每项是后一项的二倍,2、每项都比前面所有项的和大,而且大1。这个1就是关键,就因为这个1,它才可以按1递增,拼出总和之内任意一个整数。这个序列叫做超递增序列,它是解决背包问题的基础。
对于一个整数,假设377,它的二进制表示为“101111001”,它就是由第一只、第四只、第五只、第六只、第七只和第九只箱子拼成的,对于一个表现了9种操作的描述,377就是这个描述下的一个实例,是一个权值。
那么相比于保存这个字符串和保存这样一个数值,好处和坏处都在哪里呢~~很明显的,保存字符串的好处是运算压力小。我们可能听过一个故事,就是把这个超递增序列延伸到第64项,就是那个术士和皇帝在国际象棋棋盘上要米粒的传说。64项的和是一个天文数字!但是不要忘了,计算机本身就是一个只认识二进制的机器!(这点很多Web程序员都忽视了,很多人不知道位操作是什么玩意)有人担心数据库的int不够长,那么既然可以保存一个只有0、1组成的varchar字符串,为什么不能保存一个十六进制的字符串,有人规定varchar只能保存01吗?十六进制串的长度正好是二进制的四分之一,而十六进制到二进制的转化是非常直接方便的。
以上就是这个权限串的由来,不知道有多少web程序员想到过这些……而一个C或汇编程序员看到这个字符串第一眼就会想起这是个十进制的15516(当然不是马上就算得出来)。
由此引出的和web相关的,比如多选框的保存,投票选项的保存等等……

Web程序员需要学习一些数据结构、算法分析等知识,虽然在工作中不会使用得那么明显,但是这些概念是学习本身语言的一个很好的催化剂,它会让程序员更有效地理解资料上的信息,达到事半功倍的目的,也会在问题陷入苦处不得解脱时候帮助开发者理清头绪,以一个清晰的思维过程找到解决问题的突破点。

阻碍程序员学习这些的原因,第一就是基础学科不扎实,比如数学。计算机划分为理工科是非常有道理的,计算机科学建立在深厚庞大的数学系统之上,至于如何学数学……这是功夫问题了。第二是心理障碍,觉得离开学校就学不好。自然学校是学习基础学科的最好地方,但是往往工作上需要的知识更贴近实际,在实际中学习通常会比在枯燥的书本上搬东西效果更好。第三是客观原因:从业者多半工作都很忙,业余时间很少(这几乎是程序员的标志),那么学习只能在工作中见缝插针,这种学习方式需要会用巧功,会联系。第四个就是信息来源。现在适合Web程序员学习,根据Web脚本语言特点编写的基础类书籍太少了!比如数据结构类书籍多半是以C/C++/Pascal这类强类型的严谨的传统语言为描述基础,操作系统原理多是以汇编等底层脚本描述,设计思想多是以Java这种纯OO的语言为主,我没有发现有使用Perl这种怪异的语言教授数据结构的学校。

基于以上的研究结果,我们可以有条理地整理思路,多站在Web程序员的角度上考虑,做出一些适合这个特殊群体学习提高的有意义的活动。

(——NP博士,2006年6月12日夜)

linux下的ImageMagick安装方法。

linux下的ImageMagick安装方法。

首先从网上下载 ImageMagick
官方网址是: www.imagemagick.org
从官方不好下载,提供 sourceforge的下载地址: imagemagick.sourceforge.net

然后下载下来解压缩,
./configure –prefix=/usr/local/imagemagick –enable-lzw –with-modules && make && make install
基本上这样就可以了。
默认的就支持jpeg,png等图片
你也可以加入–without-xxx来禁止一些选项,具体的就 ./configure –help | grep without吧。

ok编译好了,需要的时间漫长的。
然后就可以测试了。

/usr/local/imagemagick/bin/convert -quality 90 -resize 100×100 /tmp/origine_image.jpg /tmp/small_100_100.jpg

就是说将/tmp目录下的origine_image.jpg图片重新缩放成100×100的大小保存在/tmp目录下文件名为small_100_100.jpg,图片质量为90。

具体更多的,用的时候就知道了,还可以用php把imagemagick编辑成为php的模块 )