之前大神和 rafan 等長輩都寫過要怎麼搞這種東西,不過我試的時候總是因為某些奇怪的原因沒有跑起來,直到昨天 ckmarkhsu 也說他做作業也跑起來了,我今天早上又試了一下終於成功了 :Q
基本上和這篇差不多,不過編 www/apache22 的時候加上 WITH_MPM=worker 讓它用 mpm_worker。然後之前如果有裝過 php 的話會需要重編過一次讓 extension 編成 Thread Safe,如果之前沒有選 CGI 的話記得要重新 make config 選起來。
接著就
cd /usr/ports/www/mod_fastcgi ; make install cleanmkdir /usr/local/www/fastcgi- 然後寫個 script 給 fastcgi 來跑 php:
#!/bin/sh PHPRC="/usr/local/etc" export PHPRC PHP_FCGI_CHILDREN=5 export PHP_FCGI_CHILDREN exec /usr/local/bin/php-cgi
存成 /usr/local/www/fastcgi/php.fcgi,記得要
chmod 755 /usr/local/www/fastcgi/php.fcgi - 編輯 httpd.conf,把 mod_fastcgi 的部分 unmark 掉,然後寫個 mod_fastcgi.conf 放在 /usr/local/etc/apache22/Includes/ 底下:
<IfModule fastcgi_module> ScriptAlias /fastcgi/ "/usr/local/www/fastcgi/" <Directory /usr/local/www/fastcgi> AllowOverride None Order allow,deny Allow from all </Directory> AddHandler fastcgi-script .fcgi AddHandler php-fastcgi .php Action php-fastcgi /fastcgi/php.fcgi </IfModule>
原本 php 該要 AddType 的部分還是要加,改好以後 apache restart 就可以用了。目前碰到比較麻煩的問題是有些會在 .htaccess 裡面用 php_value 設定一些東西的會不能用,這是非 php module 的先天限制。
2008-03-28 補充:
eAccelerator 會因為 Apache 跑 php-cgi 的關係不能用 (Lighttpd 可以),可以改用 www/xcache 代替。APC 也是個不錯的選擇。
Hao said
請問一下,
如何讓php extension compile成thread safe?
Maverick said
用 portupgrade -f 把 php5 和 extension 重新編過就會是 Thread Safe 的了…
Hao said
請問一下,
portupgrade怎麼會那麼神奇?重編就可以變成Thread Safe?
是自動加了甚麼參數嗎?
前輩是怎麼知道這密技的?
PS.最近一直深受”如何編出thread safe php5 and php5 extension所苦”
Thanks in advance!
Maverick said
1.照我文章說的,用
WITH_MPM=worker重編 Apache2.用 portupgrade -fr 重編
lang/php5和lang/php5-extensions編完你應該會發現 extension 的目錄原本的數字後面多了 -zts,像目前的 php5-extension 會變成在
/usr/local/lib/php/20060613-zts/底下。