工作好幾年,一直做java,一直沒玩過php,現在公司要搞個商城,小公司沒精力重新開發,準備買個別人的,做二次開發。人家的是php,沒辦法,就叫我先把他們的項目跑起來。
先吐槽一下,國內這些做產品的真的太他媽水了,php也水。php沒有向後兼容,基本算是完全固定版本。這個做產品的也不說要什麼樣的版本,版本太高報錯,版本太低也報錯
,本人外行,以爲像java,弄個比較新的版本總沒問題。遇到的種種問題就不詳細說了,大概說下經過。
1、確定php版本
先安裝的是5.5,各種報錯,同事的5.4沒問題,確定用5.4。
2、安裝http服務
因爲服務器已安裝nginx,所以直接用ngxin,不用apache httpd。這裏要說下,apache和nginx運行php的原理是不一樣的。apache是直接加載php模塊自己解析php腳本,nginx是轉發,接收到php請求就把請求轉發到php-fpm,所以nginx下一定要有php-fpm。還有就是比較老的php是沒有這個程序的,需要自己去下載
3、安裝php
主要是要注意一些選項
./configure --enable-fpm --with-mysql --prefix=/usr/local/php-5.4.45
--enable-fpm:啓用php-fpm
--with-mysql:應該是安裝mysql模塊
--prefix:安裝目錄,最好指定,不然要卸載只能一個一個去刪了
其他一些參數
--with-libdir=lib64:設置系統lib目錄,之前安裝5.1的版本,默認的lib目錄是lib而不是lib64,導致不能安裝,5.4沒發現此問題
3、修改php-fpm配置文件
cp ~/php-5.4.45/php.ini-production /usr/local/php-5.4.45/lib/php.ini
/usr/local/php-5.4.45/lib/php.ini這個就是php程序的配置文件,默認請求下php的配置文件放在安裝目錄的lib下
cd /usr/local/php-5.4.45/
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data
將user和group改爲要運行php-fpm的用戶和組,這個必須是已存在的用戶,如果不存在會報錯,創建用戶useradd -M -r -s /sbin/nologin www-data
啓動
sbin/php-fpm
4、配置nginx,取消默認的 PHP 配置塊的註釋,並修改爲下面的內容
location / {
#proxy_pass http://localhost;
root /var/www;
index index.html index.htm index.php;
}
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
/var/www/這個目錄其實是apache httpd網頁的默認目錄,nginx的默認網頁目錄不是這個,這個可以是其他的
重啓nginx
5、測試
創建一個測試文件放到/var/www/目錄下
echo "<?php phpinfo(); ?>" >> /var/www//index.php
新手最好創建這個文件,這個頁面可以提供php的很多信息,打開瀏覽器訪問localhost/index.php就可以看到php的系統信息了。
因爲我的nginx之前拿來做負載均衡,用了upstream模塊功能,localhost的所有請求都被轉發到其他地方了,所以這個頁面不能打開,刪除nginx的相關配置就可以了
6、安裝其他的php項目
把其他的php項目複製到/var/www/目錄,php項目一般都帶有應用的初始化功能,這個過程遇到兩個問題,記錄下
1)系統時區問題,修改php.ini的date.timezone =Asia/Shanghai,但是php.ini文件在哪呢?默認是在安裝目錄的lib下,我的是在/usr/local/php-5.4.45/lib下,這個目錄下可能沒有php.ini文件,如果前面沒有執行拷貝php.ini操作的話。如果沒有就要從源碼拷貝一個預先設置的php.ini文件到此目錄。也有可能php程序讀的配置文件不在這個目錄下,這樣我們在這裏修改php.ini就沒有作用了,如何確定配置文件的目錄呢?我們建立的測試文件就有大用處了,訪問index.php頁面,找到
Configuration File (php.ini) Path | /usr/local/php-5.4.45/lib |
[root@VM_211_154_centos ~]# ps -ef|grep fpm
root 7404 2563 0 13:10 pts/1 00:00:00 vi /usr/local/php-5.4.45/etc/php-fpm.conf
root 10607 1 0 14:10 ? 00:00:00 php-fpm: master process (/usr/local/php-5.4.45/etc/php-fpm.conf)
www-data 10609 10607 0 14:10 ? 00:00:14 php-fpm: pool www
www-data 10924 10607 0 14:23 ? 00:00:12 php-fpm: pool www
www-data 11462 10607 0 14:31 ? 00:00:09 php-fpm: pool www
root 13390 7421 0 15:25 pts/0 00:00:00 grep fpm
[root@VM_211_154_centos ~]#
這個php-fpm: master process就是主進程
kill -9 10607
/usr/local/php-5.4.45/sbin/php-fpm
2)擴展庫問題
我的這個項目要求curl擴展庫,但我沒安裝,所以要新增curl擴展庫。
確保系統已安裝curl,從源碼編譯curl擴展庫
cd ~/php-5.4.45/ext/curl/
/usr/local/php-5.4.45/bin/phpize
./configure --with-curl --with-php-config=/usr/local/php-5.4.45/bin/php-config
make
phpize是用來擴展php擴展模塊的,具體的不太瞭解。編譯好後會在curl下產生modules/curl.so,我們要把這個共享庫放到php的擴展文件夾裏,問題又來了,擴展文件夾在哪呢?在php.ini中extension_dir所指的目錄就是。但是php.ini中可能沒有配置這個(我的就沒有),訪問index.php頁面看看
extension_dir | /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525 | /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525 |
我的是在這個目錄下,而且還沒有這個目錄,需要自己新建。
mkdir -p /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525
把剛纔編譯好的擴展模塊放到這裏
mv ~/php-5.4.45/ext/curl/modules/curl.so /usr/local/php-5.4.45/lib/php/extensions/no-debug-non-zts-20100525/
重啓php-fpm
搞了兩天終於搞好了