Was this page helpful?

Apache2-PHP4-and-PHP5-coexist

    內容表格
    沒有標頭

    主題:Apache2 PHP4 與 PHP5 共存
    作業環境:FreeBSD 6.1-RELEASE
    軟體版本:

    • Apache 2.0.59
    • PHP 4.4.4
    • PHP 5.2.0
    • mod_fastcgi 2.4.2

    說明:要在 Apache 裡同時跑 PHP4 與 PHP5,原理很簡單就是 PHP4 跑 Apache module PHP5 跑 PHP-CGI
    版本更新

    • 2006.11.30 修正 php5 安裝的過程
    • 2006.11.27 修正安裝參數、增加 extension 的安裝、增加討論頁面
    • 2006.11.26 增加執行時的圖片
    • 2006.11.25 版面調整、增加說明文字
    • 2006.11.22 新增此頁面

    最後更新

    • 2008 年 02 月 13 日,11:18 PM

    1.安裝 Apache 2.0.59

    [root@sun ~]#cd /usr/ports/www/apache20;make install clean
    
    2.安裝 PHP4
    [root@sun ~]#cd /usr/ports/www/mod_php4/ make config
    [root@sun mod_php4]#make config
    

    取消跟 CGI 有關的選項,如果用不到 Suhosin、ipv6 可以只保留 Apache 的選項

    [X] APACHE     Build Apache module
    [X] SUHOSIN    Enable Suhosin protection system
    [X] IPV6       Enable ipv6 support
    

    改變安裝路徑將 PHP4 安裝到 /usr/local/php4 下面

    [root@sun mod_php4]#make PREFIX=/usr/local/php4 install clean
    

    編輯 Apache 設定檔

    [root@sun mod_php4]#joe /usr/local/etc/apache2/httpd.conf
    

    加入 PHP4 的設定,並且將 Log 的等級調成 debug

    LoadModule php4_module modules/libphp4.so
    AddType application/x-httpd-php .php .phtml .php3
    LogLevel debug
    

    3.試跑一下
    檢查 Log files,有 PHP/4.4.4 with Suhosin-Patch configured 訊息表示 mod_php4 安裝成功

    [root@sun ~]#apachectl start
    [root@sun ~]#tail /var/log/http-error.log
    [Sun Nov 19 00:24:55 2006] [notice] Apache/2.0.59 (FreeBSD) PHP/4.4.4 with Suhosin-Patch configured -- resuming normal operat
    [Sun Nov 19 00:24:55 2006] [info] Server built: Nov 18 2006 21:35:46
    [Sun Nov 19 00:24:55 2006] [debug] prefork.c(956): AcceptMutex: flock (default: flock)
    
    4.安裝 mod_fastcgi
    [root@sun ~]#cd /usr/ports/www/mod_fastcgi;make install clean
    

    加入 mod_fastcgi 相關設定

    [root@sun mod_fastcgi]#joe /usr/local/etc/apache2/httpd.conf
    
    LoadModule modules/mod_fastcgi.so
    FastCgiIpcDir /tmp/fcgi_ipc/
    AddHandler fastcgi-script .fcgi
    

    5.試跑一下
    檢查 Log files,如果出現 mod_fastcgi/2.4.2 configured 訊息表示安裝成功

    [root@sun ~]#apachectl start
    [root@sun ~]#tail /var/log/http-error.log
    [Sun Nov 19 01:12:10 2006] [notice] Apache/2.0.59 (FreeBSD) PHP/4.4.4 with Suhosin-Patch mod_fastcgi/2.4.2 configured -- resu
    [Sun Nov 19 01:12:10 2006] [info] Server built: Nov 18 2006 21:35:46
    [Sun Nov 19 01:12:10 2006] [debug] prefork.c(956): AcceptMutex: flock (default: flock)
    

    6.安裝 php5
    因為安裝 php5 要用到 libxml2 所以要先安裝,否則用自訂安裝的方式會將 libxml2 安裝到 /usr/local/php5 下面,如果已經安裝 libxml2 的話可以跳過這一步。

    [root@sun ~]#cd /usr/ports/textproc/libxml2 ; make install clean
    

    也可以用 mod_php5 安裝,只不過是在 pkg_info 裡面有不同的紀錄而已

    [root@sun ~]#cd /usr/ports/lang/php5 ; make config
    

    選擇所有的 CGI only 選項,並且取消 Apache module,如果在 php4 有把 Suhosin、ipv6 安裝進去的話,php5 就不能勾選,另外如果要用 CLI 的話可以勾選。

    [X] CGI        Build CGI version
    [X] REDIRECT   Enable force-cgi-redirect support (CGI only)
    [X] DISCARD    Enable discard-path support (CGI only)
    [X] FASTCGI    Enable fastcgi support (CGI only)
    [X] PATHINFO   Enable path-info-check support (CGI only)
    

    改變安裝路徑將 PHP5 安裝到 /usr/local/php5 下面

    [root@sun php5]#make PREFIX=/usr/local/php5 install clean
    
    7.改 Apache 設定檔
    [root@sun php5]#joe /usr/local/etc/apache2/httpd.conf
    

    加入 php5 相關設定

    AddHandler php5-fcgi .php5
    Action php5-fcgi /php5.fcgi
    

    讓 /usr/local/www/ 下面的資料夾可以執行 CGI,加入 Options ExecCGI

    <Directory "/usr/local/www">
    
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.0/mod/core.html#options
    # for more information.
    #
        Options Indexes FollowSymLinks ExecCGI
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit Indexes
    #
        AllowOverride None
    
    #
    # Controls who can get stuff from this server.
    #
        Order allow,deny
        Allow from all
    
    </Directory>
    
    

    8.新增 php-cgi script
    放在 /usr/local/www/data-dist/php5.fcgi

    #!/bin/sh
    PHP_FCGI_CHILDREN=4
    export PHP_FCGI_CHILDREN
    PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_MAX_REQUESTS
    exec /usr/local/php5/bin/php-cgi -c /usr/local/php5/etc/php.ini
    

    將權限改成 755

    [root@sun data]#chmod 755 php5.fcgi
    
    9.跑起來
    [root@sun ~]#apachectl start
    [root@sun ~]#ps aux | grep www
    www       47131  0.0  1.2 53752  6296  ??  I     8:45下午   0:00.02 /usr/local/sbin/httpd -k start
    www       47132  0.0  1.3 53936  6472  ??  I     8:45下午   0:00.04 /usr/local/sbin/httpd -k start
    www       47133  0.0  1.3 53896  6432  ??  I     8:45下午   0:00.02 /usr/local/sbin/httpd -k start
    www       47134  0.0  1.2 53776  6304  ??  I     8:45下午   0:00.01 /usr/local/sbin/httpd -k start
    www       47135  0.0  1.2 53776  6304  ??  I     8:45下午   0:00.01 /usr/local/sbin/httpd -k start
    www       47136  0.0  1.2 53776  6304  ??  I     8:45下午   0:00.01 /usr/local/sbin/httpd -k start
    www       47139  0.0  1.2 53776  6304  ??  I     8:45下午   0:00.01 /usr/local/sbin/httpd -k start
    www       47140  0.0  1.0 14112  5176  ??  Is    8:45下午   0:00.11 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini
    www       47141  0.0  1.0 14240  5328  ??  I     8:45下午   0:00.02 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini
    www       47142  0.0  1.0 14240  5272  ??  I     8:45下午   0:00.01 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini
    www       47143  0.0  1.0 14240  5272  ??  I     8:45下午   0:00.01 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini
    www       47144  0.0  1.0 14112  5192  ??  I     8:45下午   0:00.00 /usr/local/bin/php-cgi -c /usr/local/etc/php5/php.ini
    www       47145  0.0  1.2 53776  6304  ??  I     8:45下午   0:00.01 /usr/local/sbin/httpd -k start
    
    10.放 phpinfo 上去試試看
    <?
      phpinfo();
    ?>
    

    跑 php4 的副檔名就用 php,跑 php5 的副檔名就用 php5

    [root@sun data]#cp info.php info.php5
    

    實際執行狀況

    Full View Full View

    11.安裝 PHP4-extension
    因為 PHP4 與 PHP5 是用自訂位置的方式,所以在安裝 extension 的時候必須將 PHP 的 build environment、header files、helper programs 的位置 link 到原來 ports 的位置

    [root@sun ~]#cd /usr/local/include
    [root@sun include]#ln -s /usr/local/php4/include/php php
    [root@sun ~]#cd /usr/local/lib
    [root@sun lib]#ln -s /usr/local/php4/lib/php php
    [root@sun ~]#cd /usr/local/bin/
    [root@sun bin]#ln -s /usr/local/php4/bin/php-config php-config
    [root@sun bin]#ln -s /usr/local/php4/bin/phpize phpize
    

    安裝 php4-extension,選需要的 extension 安裝

    [root@sun ~]#cd /usr/ports/lang/php4-extensions/
    [root@sun php4-extensions]#make install clean
    

    安裝完後將 extension.ini 移到自訂的位置下面

    [root@sun ~]#cd /usr/local/php4/etc
    [root@sun etc]#mkdir php
    [root@sun ~]#cd /usr/local/etc/php
    [root@sun php]#cp extensions.ini /usr/local/php4/etc/php/
    

    12.安裝 PHP5-extension
    安裝方法一樣只要把 link 改成 PHP5 的位置就可以了,PHP5 要多 link 一個 php-cgi

    [root@sun ~]#cd /usr/local/include
    [root@sun include]#ln -s /usr/local/php5/include/php php
    [root@sun ~]#cd /usr/local/lib
    [root@sun lib]#ln -s /usr/local/php5/lib/php php
    [root@sun ~]#cd /usr/local/bin/
    [root@sun bin]#ln -s /usr/local/php5/bin/php-config php-config
    [root@sun bin]#ln -s /usr/local/php5/bin/phpize phpize
    [root@sun bin]#ln -s /usr/local/php5/bin/php-cgi php-cgi
    

    安裝 php5-extension,選需要的 extension 安裝

    [root@sun ~]#cd /usr/ports/lang/php5-extensions/
    [root@sun php5-extensions]#make install clean
    

    安裝完後將 extension.ini 移到自訂的位置下面

    [root@sun ~]#cd /usr/local/php5/etc
    [root@sun etc]#mkdir php
    [root@sun ~]#cd /usr/local/etc/php
    [root@sun php]#cp extensions.ini /usr/local/php5/etc/php/
    

    13.讓特定資料夾 php5 副檔名改成 php
    利用 apache 設定讓特定的資料夾副檔名由 php5 改回 php,編輯 apache 設定檔加入以下敘述,使 /usr/local/www/php5 下面的 php 用 php5-fcgi 跑,其他資料夾也可如法炮製。

    <Directory "/usr/local/www/php5">
       AddHandler php5-fcgi .php
    </Directory>
    

     

    參考連結

     

    Was this page helpful?
    標籤 (Edit tags)
    • No tags
    blog comments powered by Disqus
    Powered by MindTouch Core