天天看點

mac在xampp下使用yii2.0開發環境配置

  在mac上裝環境,折騰了我好久。先用是mac自帶的php,但自帶的PHP很多擴充都需要自己安裝。libevent,memcache等擴充都安裝好了之後,發現pdo_mysql.dll擴充又沒有,悲劇的是下班回來好幾天都沒搞好。因為年底比較忙,是以隻有下班回來才能調環境。後來不行我就想用個xampp內建環境,剛好在公司用的也是xampp,一般的擴充都內建了,不用再安裝了。

      後來下了一個xampp,但是問題又出現了,之前能用的memcache擴充不能用了,我又重新安裝,但都不行。犯的第一個錯誤是安裝指令不對,PHP在xampp裡面,是以得使用

sh-32# /Applications/XAMPP/xamppfiles/bin/phpize
sh-32# ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config --with-libevent=/usr/local/libevent-2.0.21      

phpize,php-config路徑都變了,是以網上找的代碼需要進行改動。這次好歹對./configure的參數--with,--prefix等有個了解了

    memcached擴充安裝好之後,覺得可以大功告成了,怎料運作程式的時候頁面打不開,傳回碼也沒有,然後檢視apache error_log,發現這個錯誤

dyld: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/local/memcache-3.0.8/memcache-3.0.8/modules/memcache.so
  Expected in: flat namespace

[Fri Jan 16 23:40:46 2015] [notice] child pid 4317 exit signal Trace/BPT trap (5)
dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/local/memcache-3.0.8/memcache-3.0.8/modules/memcache.so
  Expected in: flat namespace
      

  網上搜尋了一下,有人說是因為3.0.8是beta版本,得換個穩定版,我自己的本地PHP版本是5.63,是以也沒細看就用了個高版本的memcached,是以出現這個錯誤。接下來換個穩定版的重新安裝了一遍。http://pecl.php.net/package/memcached 裡選擇一個,運作項目的時候首頁終于呈現在眼前了。随便點了其它頁面,又出現錯誤。發現是 php_intl.dll 擴充沒有安裝。yii2.0進階版的yii::t()使用到了intl擴充。而xampp沒有自帶intl擴充。看了網上的教程都說将icudt38.dll擴充複制到apache的bin目錄裡。可我搜尋時發現本地根本沒有icu開頭的擴充。也許xampp 的mac版有些不一樣。最後檢視這篇文章http://www.th7.cn/Program/php/201408/261919.shtml重新安裝。

/usr/local/php/bin/phpize
./configure --enable-intl --with-icu-dir=/usr/local/icu/ --with-php-config=/usr/local/php/bin/php-config      

這個路徑要改成本地xampp的路徑。

sh-3.2# /Applications/XAMPP/xamppfiles/bin/phpize
sh-32# ./configure --with-icu-dir=/usr/local/icu --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config

sh-3.2# /Applications/XAMPP/xamppfiles/bin/php -m |grep intl
Warning: PHP Startup: Unable to load dynamic library '/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/php_intl.dll' - dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/php_intl.dll, 9): image not found in Unknown on line 0      
後來出現warning錯誤的原因是之前看了别的網站,将php.ini裡面的php_intl.dll前的;号去掉了,這個不能去,在配置檔案最後加個extension=intl.so就可以了。      

現在想想其它這些都不難,難就難在自己對./configure指令不熟,不知道用--with來關聯依賴包,不知道安裝php擴充的時候先phpize,這個一定要是你目前使用的php環境目錄下的。其它的真的就沒什麼難的了。是以隻會照着網上的步驟去安裝,而不去追究為什麼要這麼安裝,那将會多走很多彎路。

部分架構安裝完成之後,始終運作不了,調試的時候發現在memcache确認是安裝了。我本地mac可以,線上centos6.5就是不行。最後發現是架構的原因,在httpd.conf裡面的rewirte上面增加。

httpd.conf兩個地方都有

opt/lampp/apache2/conf/httpd.conf
/opt/lampp/etc/httpd.conf      

你要選擇apache2/conf/httpd.conf,将網站通路位址和rewrite規則寫進去。要是寫錯了,rewrite會卡爆你。

SetEnv PROJECT_ENV "dev"
    SetEnv MEMCACHED_CLIENT "Memcache"
    SetEnv SRV_DB_HOST "127.0.0.1"
    SetEnv SRV_DB_PORT "3306"
    SetEnv SRV_DB_NAME "***"
    SetEnv SRV_DB_USER "*******"
    SetEnv SRV_DB_PASS "*******"
    SetEnv SRV_MEMCACHED_SERVERS "127.0.0.1:11211"      

終于完成了原來架構是找MEMCACHED_CLIENT來判斷是memcache還是memcached。前後斷斷續續花了我兩個月,我擦,找到原因的時候有點想哭的感覺。

繼續閱讀