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” 端口打開即可。

注意:在 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 信息。

看到這樣的圖,就說明 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 模塊,看是否檢測到相關信息。

如果看到如上圖相關信息,則說明 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
這樣就可以了