http://blog.chinaunix.net/uid-24426415-id-77267.html
在安装cacti的时候是需要使用到sockets模块的,如果在安装php的时候没有使用--with-sockets的话,这时就必须手动重新添加此模块。操作步骤如下:
1。进入php源文件目录ext下,找到sockets目录。并进入此目录
#cd php-5.2.9/ext/sockets/
2.在该目录下执行phpize命令,此命令在php目录的bin下。
# /usr/local/php/bin/phpize
3。配置编译安装
# ./configure --enable-sockets --with-php-config=/usr/local/php/bin/php-config
# make
# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
提示so已经安装到目录下。
4。修改配置在php.ini里,设置扩展目录:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并添加扩展模块引用:
extension = sockets.so
5.检查php.ini配置文件的正确性
/usr/local/php/bin/php -v
执行这个命令时,php会去检查配置文件是否正确,如果有配置错误,这里会报错,可以根据错误信息去排查
6.通过/usr/local/php/bin/php -m命令查看是否安装sockets成功
monitor# /usr/local/php/bin/php -m [PHP Modules] ctype date dom filter gd hash iconv json libxml mbstring mysql pcre PDO pdo_sqlite posix Reflection session SimpleXML sockets SPL SQLite standard tokenizer xml xmlreader xmlwriter zlib [Zend Modules]
|
7.重启apache生效
/usr/local/apache2/bin/apachectl restart
http://wecoo.iteye.com/blog/1119812 php安装
安装php-5.3.4.tar.bz2首先要安装libxml2而且版本不低于2.6.11,这里我选择的libxml2-2.6.30.tar.bz2
[root@localhost root]# tar xjvf libxml2-2.6.31.tar.bz2
[root@localhost root]# cd libxml2-2.6.31
[root@localhost libxml2-2.6.31]# ./configure --prefix=/usr/local/libxml2
[root@localhost libxml2-2.6.31]# make
[root@localhost libxml2-2.6.31]# make install
到这里libxml2就安装完成了,下面开始安装PHP5.3
[root@localhost libxml2-2.6.31]# cd
[root@localhost root]# tar -xjvf php-5.3.4.tar.gz2
[root@localhost root]# cd php-5.3.4
[root@localhost php-5.3.4]# ./configure --prefix=/usr/local/php5 //安装位置
--enable-mbstring //设置 php 支持多字节字符串
--with-apxs2=/usr/local/apache2/bin/apxs //设置 apache 服务支持 apxs位置
--width-libxml-dir=/usr/local/libxml2 //设置刚才安装的libxml2位置
--with-mysql=/usr/mysql //设置 mysql 程序安装位置
--with-config-file-path=/usr/local/php5 //设置 php 程序配置文件位置
[root@localhost php-5.3.4]# make
[root@localhost php-5.3.4]# make install
[root@localhost php-5.3.4]# cp php.ini-development /usr/local/php5/php.ini
在 APACHE里添加 php,使 APACHE 支持 PHP
[root@localhost php-5.3.4]# vi /usr/local/apache2/conf/httpd.conf
53 LoadModule php5_module modules/libphp5.so
54 AddType application/x-httpd-php .php //或者在下面的meta中定义(搜索AddType就可以找到)
167
168 DirectoryIndex index.php index.html
169
[root@localhost php-5.3.4]# service apache restart
创建index.php在网站默认根目录下,输入网址访问测试
--------------------------------------------------------------
源码安装时提示找不到 libxml2
yum install libxml2 libxml2-devel
----------------------------------------------------------------
php socket测试时 提示
Warning: socket_create() Unable to create socket [1]: Operation not permitted
需要root权限,可用通过在root下 /usr/local/php/bin/php ping.php 来运行
The class is using SOCK_RAW
to create the socket. It might be you need root privilegues on your machine to execute this code. If this any issue with your enviroment, then fall back to shell_exec
--------------------------------------
Unable to load dynamic library '/usr/lib/php/modules/pgsql.so' - libpq.so.5: failed to map segment from shared object:
在使用PHP编写web页面访问Postgres数据库时,遇到了apache 没有正确加载pdo_pgsql.so的问题, 把它记录下来以备用。
通过web访问php页面时,页面没有反应, 查看http log时出现下面的错误:
PHP Fatal error: Call to undefined function pg_connect()
但是在命令行运行php程序访问postgres测试是成功的, 没有发现问题。
网上搜索,都是说php访问postgres 安装了php-pgsql就可以了。 但我已经通过yum安装了php-pgsql, 查看/etc/php.ini, /etc/php.d/pdo_pgsql.ini都是配置正确的。
[root@localhost php.d]# cat pdo_pgsql.ini
; Enable pdo_pgsql extension module
extension=pdo_pgsql.so
phpinfo()也显示加载了pdo_pgsql.ini, pgsql.ini , 但在PDO节里没有看到Postgres。
后来想到会不会是SElinux的问题, 把SElinux 关了,再重启apache,
[root@localhost php.d]# setenforce 0
service httpd restart
重启运行phpinfo(), 就看到postgres 正确加载了。
回过来查看以前apache 的error_log, 确实是php 在加载pdo_pgsql.so 时出现了由于访问权限引起的问题。
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/pdo_pgsql.so' - libpq.so.5: failed to map segment from shared object: Permission denied in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/pgsql.so' - libpq.so.5: failed to map segment from shared object: Permission denied in Unknown on line 0
把SElinux 关了后, 启动apache时就没有这个错误了,php也成功加载了pgsql。
在实际应用中就需要关闭SElinux,或者重设libpq.so.5的权限。
-----------------------------------------------------
/usr/bin/apxs: no such file or directory
yum install httpd-devel
以apache为例
如果以rpm包形式安装
1.rpm包形式(包括yum安装)可以
rpm -aq|grep http #查看是否安装了apache的包
rpm -qi 输入上一步获取的包名 #了解一下这个apache包的信息
rpm -ql 输入包名 #此apache包中所有文件安装的位置
2,源码安装
whereis httpd #http文件的位置
http://down.chinaz.com/server/201109/1064_1.htm
http://www.laozhe.net/articles/302.html
CentOS 6.0 系统 LAMP(Apache+MySQL+PHP) 安装步骤
先来解释一下,什么是 LAMP。正如标题所言,LAMP 实际上就是 Linux、Apache、MySQL、PHP 四个名称的缩写,当然最后一个 “P” 还有其他说法是 Perl 或者 Python。不用多说了,本文讲解的就是 Linux、Apache、MySQL、PHP 这四个东西,所以就这样解释了。
自己很早就在做网站,最初玩的是 ASP,后来主要研究 .Net,也用 .Net 搞过类似的开发。但是自己最主要还是想把网站做起来,于是乎就将主要精力花在了网站运营上了,当然建站就选用了市面上成熟的一些 CMS 或者是博客程序。目前的 CMS 和博客程序实际上都可以融入到一起,因为其内容的表现形式上相当的接近,故选择哪一块来做,完全看自己的特长了。
由于 Linux 和 PHP 的免费,在国外是相当的流行。国内大部分主机都是 Windows 平台,而我学的 ASP 和 .Net 刚好能搭配运行起来。后来由于种种原因,我的网站都移民到了国外,而在国外找一个性价比好的 Windows 主机实在是件难事,不光语言上的阻碍,国外版权意识很好,所以很少有性价比好的 Windows 主机。我不得不转向了 Linux 平台。而且非常流行的 WordPress 吸引了我,故目前主要注意力就集中在 Linux 主机和 PHP 上。虽然自己对 PHP 基本不了解,呵呵。
虽然 Linux 平台上好的组件不止 Apache 一个,例如俄罗斯人开发的 Nginx,还有性能超强的 LiteSpeed 等等,这两者我都用过,前者以高效、资源占用低为特点,据说腾讯网就是基于此运行的,后者是以性能强大著称,同样据说这是 WordPress 官方推荐的用来运行 WordPress 最佳组件。但是呢,各种网上资料表明,虽然 Apache 性能、资源占用不如其他组件,但是 Apache 开发的目标就是以稳定为主。任何一个网站难道不是希望能够稳定运行?所以我还是选择学习 Apache 来作为网站的服务器环境。学会了一个,其他就能够举一反三了。
一般情况下,安装的都是最新的正式版,除非你有特殊需求,要安装指定的版本,本文暂不讨论。从最基础的开始,一点点完成一个可用的 Linux 主机。这里就开始介绍如何在 CentOS 6.0 上安装 LAMP 组件。经过如下语句安装,目前安装到的版本为:
PHP:5.3.2
Apache:2.2.15
MySQL:5.1.52
一、安装 MySQL
首先来进行 MySQL 的安装。打开超级终端,输入:
| yum install mysql mysql-server |
安装完毕,让 MySQL 能够随系统自动启动:
| chkconfig --levels 235 mysqld on /etc/init.d/mysqld start |
设置 MySQL 数据 root 账户的密码:
| mysql_secure_installation |
当出现如下提示时候直接按回车:
Enter current password for root
出现如下再次回车:
Set root password? [Y/n]
出现如下提示输入你需要设置的密码,回车后在输入一次确认:
New password:
接下来还会有四个确认,分别是:
- Remove anonymous users? [Y/n]
- Disallow root login remotely? [Y/n]
- Remove test database and access to it? [Y/n]
- Reload privilege tables now? [Y/n]
直接回车即可。
二、安装 Apache 组件
由于 CentOS 已经封装了 Apache,直接运行安装:
同样配置系统让 Apache 随系统启动:
| chkconfig --levels 235 httpd on |
配置完毕,启动 Apache:
此时已经可以访问你的服务器,不出意外的话,能够看到 “Apache 2 Test Page powered by CentOS” 的测试页面。注意,如果其他机器访问这台服务无法显示这个页面,而直接在这台服务器上可以访问的话,一般情况下是 CentOS 自带的防火墙禁止了。你只需要进入防火墙,将 “WWW” 对应的 “80” 端口打开即可。
![](http://www.laozhe.net/wp-content/uploads/2011/09/CentOS6_LAMP_1.jpg)
注意:在 CentOS 中 Apache 的默认根目录是 /var/www/html,配置文件 /etc/httpd/conf/httpd.conf。其他配置存储在 /etc/httpd/conf.d/ 目录。
三、安装 PHP
输入如下指令安装 PHP:
需要重新启动 Apache 服务:
| /etc/init.d/httpd restart |
四、测试 PHP 相关信息
这步实际上可以省略,但是为了测试是否安装成功,你可以新建一个 PHP 页面进行测试,使用 vim 编辑器新建:
| vi /var/www/html/info.php |
按 “i” 键进行编辑,输入:
编辑完毕,按 “ESC” 键退出编辑模式,接着输入:
然后回车,即保存并退出。
此时你可以访问你的站点地址,例如 “http://192.168.1.2/info.php”,查看是否能看到相关的 PHP 信息。
![](http://www.laozhe.net/wp-content/uploads/2011/09/CentOS6_LAMP_2.jpg)
看到这样的图,就说明 PHP 安装成功了。
五、将 PHP 模块和 MySQL 模块关联起来
还需要将 PHP 和 MySQL 关联起来,才能正常工作。搜索模块:
安装相关模块:
| yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc |
需要重启 Apache 模块才能生效:
| /etc/init.d/httpd restart |
再次刷新刚才建立的 “info.php” 页面,往下拉找到相关 MySQL 模块,看是否检测到相关信息。
![](http://www.laozhe.net/wp-content/uploads/2011/09/CentOS6_LAMP_3.jpg)
如果看到如上图相关信息,则说明 MySQL 工作正常了。
六、总结
到这里就结束了,本文阐述了在 CentOS 6.0 系统下 LAMP 组件(Apache+MySQL+PHP) 的详细安装步骤,可以让更多新手熟悉服务器配置环境。
但是到这里,还只是将环境配置完毕,很多东西还有欠缺,而且还是一些重要的问题,例如目录的权限配置问题,或者是管理上的问题,像建立 FTP 等。这些内容随后会慢慢谈到。
http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
本文主要讲解下,让Vim能正确显示和保存各种编码文件的一些常用方法。
Vim编码配置里面有3个选项,分别是encoding 、fileencodings、fileencoding 简写分别对应为enc、fencs、fenc。
encoding(enc): 此项目配置的是vim的默认显示编码,如果你打开的文件编码与该属性配置的编码不同,那么Vim会将编码自动转换到这种编码然后再显示,
如果如果这2种编码集合完全对应那么很有可能出现坏块也就是没转换成功然后从列表(下面就讲到,实际上就是fens)中搜寻下一个编码,也就是出现我们所说的乱码。
验证上述结论:用vim打开一个文件,输入":set encoding" vim 会自动把encoding的值打印出来。
fileencodings(fencs): 此项目配置的是一个编码列表,Vim在读取文件的时候,会根据这里的编码自动检测,如果检测失败则尝试下一个,直到检测成功为止。如果一直没有转换成功,则此值会为空,也就是上述encoding的枚举,你可以重新调整循序来调整优先级。(需要在.vimrc中修改)
验证上述结论:同上,打印fencs的值(fencs 就是 fileencodings)
fileencoding(fenc):这个东西尤其重要这个配置的是新建文件和保存文件时文件的编码,如果它的值与encoding(enc)不一样,那么保存的时候Vim会自动把文件内容由encoding(enc)的编码转换为fileencoding(fenc)配置编码再保存。而读取文件的时候,该选项的值会自动同步为fileencodings(fencs):配置的有效编码。(实际上就是上面说的转换规则)
例如:
如果我们是如下配置
encoding(enc):utf-8
fileencodings(fencs):utf-8,gbk
fileencoding(fenc):gbk
那么我们打开一个gbk编码的文件,Vim会将内容转换为utf-8格式来显示,但是保存的时候文件的编码却依然是gbk
如果我的工作环境主要是编辑utf-8,偶尔会修改一下gbk的编码,我们该怎么配置呢?
首先我们可以把fileencoding留空,然后只配置fileencodings(fencs):utf-8,gbk,ucs-bom,cp936(这个需要在.vimrc中配置,不然下一次打开不会改变,而且这个列表是打开后不能改的,改了也没效果)
按照上面的规则,Vim就会自动把文件保存为gbk的编码了
如果我编辑了一个utf-8文件,想把它以gbk的格式保存,该怎么办呢?
在命令行模式输入 :set fenc=gbk 然后保存文件即可,保存之后再输入:set fenc=utf-8就可以继续编辑其他utf-8文件了
------------------------------------------------------------------------------------------
查看postgresql 连接情况: select * from pg_stat_activity;
------------------------------------------------------------------------------------------
timestamp to unix
select user_id, date_part('epoch',create_time)::integer from tb_account;
------------------------------------------------------------------------------------------
unix to timestamp
select user_id, to_timestamp(online_time) as online from login_log order by user_id;
select to_timestamp(online_time)::timestamp without time zone as online_t from login_log;
------------------------------------------------------------------------------------------
列出所有数据库
\list
------------------------------------------------------------------------------------------
查看当前连接,当前的操作
select * from pg_stat_activity;
------------------------------------------------------------------------------------------
psql 显示查询时间
\timing
------------------------------------------------------------------------------------------
查询所有的索引,所有的表
select * from pg_stat_user_indexes;
select * from pg_stat_user_tables;
-------------------------------------------------------------------------------------------
client 编码
1 使用psql 里的 \encoding 命令。 \encoding 允许你动态修改客户端编码。 比如,\encoding utf8
2 使用 libpq 函数。 \encoding 在做此用途的时候实际上是调用 PQsetClientEncoding()。
int PQsetClientEncoding(PGconn *conn, const char *encoding);这里 conn 与后端的联接,而 encoding 是你想用的编码。如果编码设置成功它返回 0,否则返回 -1。本次联接的当前编码可以用下面函数显示:
int PQclientEncoding(const PGconn *conn);请注意它只返回编码 ID,而不是象 EUC_JP 这样的编码符号字串。 要把编码 ID 转换为编码符号,你可以用:
char *pg_encoding_to_char(int encoding_id);
3 使用 SET client_encoding TO 。 可以用 SQL 命令设置客户端编码:
SET CLIENT_ENCODING TO 'value';你还可以把 SQL 语法里的 SET NAMES用于这个目的:
SET NAMES 'value';查询当前客户端编码:
SHOW client_encoding;返回缺省编码:
RESET client_encoding;
4 使用 PGCLIENTENCODING。 如果在客户端的环境里定义了 PGCLIENTENCODING 环境变量, 那么在与服务器进行联接时将自动选择客户端编码。 (这个编码随后可以用上面谈到的任何其它方法覆盖。)
5 使用client_encoding配置变量。 如果在 postgresql.conf 里设置了 client_encoding 变量, 那么在与服务器建立了联接之后,这个客户端编码将自动选定。(这个设置随后可以被上面提到 的其他方法覆盖。)
--------------------------------------------------------------------------------------------
无需手动输入密码
1 可以设置pg_hba.conf
2 可以在用户目录下新建 .pgpass文件, 内容为ip:port:dbname:username:password 例如 localhost:5432:*:postgres:321654
3 可以通过设置PGPASSWORD 环境变量
--------------------------------------------------------------------------------------------
删除所有表
1 创建函数
CREATE FUNCTION drop_all_table() RETURNS void AS $$
DECLARE
tmp VARCHAR(512);
DECLARE names CURSOR FOR
select tablename from pg_tables where schemaname='public';
BEGIN
FOR stmt IN names LOOP
tmp := 'DROP TABLE '|| quote_ident(stmt.tablename) || ' CASCADE;';
RAISE NOTICE 'notice: %', tmp;
EXECUTE 'DROP TABLE '|| quote_ident(stmt.tablename) || ' CASCADE;';
END LOOP;
RAISE NOTICE 'finished .....';
END;
$$ LANGUAGE plpgsql;
2 执行 select drop_all_table();
----------------------------------------------------------------------------------------------
加注释, 给表结构加注释
COMMENT ON COLUMN table.col IS 'this is comment';
postgresql 只能通加comment加注释, 不能在create语句里加
----------------------------------------------------------------------------------------------
lua5.1.5 安装
lua默认编译出的是静态库, 要生成动态库需作如下修改:
1: src/Makefile
如果是64位系统, 在CFLAGS后加 -fPIC 参数
在38行左右加 LUA_SO= liblua.so
ALL_T后加 $(LUA_SO)
60行左右加生成规则:
$(LUA_SO): $(CORE_O) $(LIB_O)
$(CC) -o $@ -shared $? -ldl -lm
2: lua根目录下的 Makefile
修改TO_LIB 为 TO_LIB= liblua.a liblua.so
修改完后开始安装
make linux
make install
这样在lua根目录下会生成liblua.so, 将liblua.so copy到/usr/local/lib下
cp liblua.so /usr/local/lib
这样就可以了