macOSで、PHPをソースからビルド、Apacheと連携する

主題
macOSで、PHPをソースからビルド、Apacheと連携する手順を述べる。

背景
Big Surになって融通の効かなくなった、OSビルトインのApache Webサーバーの代わりに、別のApache Webサーバーを導入した。
せっかくなので、PHPを導入し、Apacheから使えるようにすることにした。なお、PHPを自前ビルドした理由は、OSビルトインのPHPをバージョン確認すると、将来削除するで〜と警告するせいでもある。

手順

  1. Apacheのコンパイルとインストール
    当然のことだが、Apacheは導入済みとして話を進める。未導入の場合は、この記事に沿って導入されたい。

  2. PHP導入に必要な項目のコンパイルとインストール

    1. pkg-configのコンパイル&インストール

                              curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
                              tar xf pkg-config-0.29.2.tar.gz
                              cd pkg-config-0.29.2
                              ./configure --with-internal-glib
                              make
                              sudo make install
                          
    2. cmakeのコンパイルとインストール

                              curl -LO https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0.tar.gz
                              tar xf cmake-3.21.0.tar.gz
                              cd cmake-3.21.0
                              rm Modules/FindJava.cmake
                              curl -OJL "https://docs.google.com/uc?export=download&id=0B2uOKVwFe1AXU1QzdXlvc0VRSEU"
                              patch -p1 < cmake_CMakeLists.patch
                              ./bootstrap; make; sudo make install
                          
    3. OpenSSLのコンパイルとインストール

                              curl -LO https://www.openssl.org/source/openssl-1.1.1k.tar.gz
                              tar xf openssl-1.1.1k.tar.gz
                              cd openssl-1.1.1k
                              ./config --openssldir=/usr/local/ssl
                              make
                              sudo make install
                          
    4. GNU bisonのコンパイルとインストール

                              curl -LO https://ftp.gnu.org/gnu/bison/bison-3.7.6.tar.xz
                              tar xf bison-3.7.6.tar.xz
                              cd bison-3.7.6
                              ./configure --prefix=/usr/local/gnu_bison
                              make
                              sudo make install
                          
    5. re2cのコンパイルとインストール

                              curl -LO https://github.com/skvadrik/re2c/releases/download/2.1.1/re2c-2.1.1.tar.xz
                              tar xf re2c-2.1.1.tar.xz
                              cd re2c-2.1.1
                              ./configure --prefix=/usr/local/re2c
                              make
                              sudo make install
                              sudo ln -s /usr/local/re2c/bin/re2c /usr/local/bin/re2c
                          
    6. libxml2のコンパイルとインストール

                              curl -LO ftp://xmlsoft.org/libxml2/libxml2-2.9.12.tar.gz
                              tar xf libxml2-2.9.12.tar.gz
                              cd libxml2-2.9.12
                              ./configure --prefix=/usr/local/libxml2
                              make
                              sudo make install
                              sudo ln -s /usr/local/libxml2/lib/pkgconfig/libxml-2.0.pc /usr/local/lib/pkgconfig/libxml-2.0.pc
                          
    7. SQLite3のコンパイルとインストール

                              curl -LO https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
                              tar xf sqlite-autoconf-3360000.tar.gz
                              cd sqlite-autoconf-3360000
                              ./configure --prefix=/usr/local/sqlite3
                              make
                              sudo make install
                              sudo ln -s /usr/local/sqlite3/lib/pkgconfig/sqlite3.pc /usr/local/lib/pkgconfig/sqlite3.pc
                          
    8. libcurlのコンパイルとインストール

                              curl -LO https://curl.se/download/curl-7.77.0.tar.xz
                              tar xf curl-7.77.0.tar.xz
                              cd curl-7.77.0
                              ./configure --prefix=/usr/local/curl --with-openssl
                              make
                              sudo make install
                              sudo ln -s /usr/local/curl/lib/pkgconfig/libcurl.pc /usr/local/lib/pkgconfig/libcurl.pc
                          
    9. libiconvのコンパイルとインストール

                              curl -LO https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
                              tar xf libiconv-1.16.tar.gz
                              cd libiconv-1.16
                              ./configure --prefix=/usr/local/libiconv
                              make
                              sudo make install
                          
    10. onigurumaのコンパイルとインストール

                              curl -LO https://github.com/kkos/oniguruma/releases/download/v6.9.7.1/onig-6.9.7.1.tar.gz
                              tar xf onig-6.9.7.1.tar.gz
                              cd onig-6.9.7
                              ./configure --prefix=/usr/local/oniguruma
                              make
                              sudo make install
                              sudo ln -s /usr/local/oniguruma/lib/pkgconfig/oniguruma.pc /usr/local/lib/pkgconfig/oniguruma.pc
                          
    11. libjpegのコンパイルとインストール

                              curl -LO https://www.ijg.org/files/jpegsrc.v9d.tar.gz
                              tar xf jpegsrc.v9d.tar.gz
                              cd jpeg-9d
                              ./configure --prefix=/usr/local/jpeg
                              make
                              sudo make install
                              sudo ln -s /usr/local/jpeg/lib/pkgconfig/libjpeg.pc /usr/local/lib/pkgconfig/libjpeg.pc
                          
    12. libpngのコンパイルとインストール

                              curl -LO http://prdownloads.sourceforge.net/libpng/libpng-1.6.37.tar.xz
                              tar xf libpng-1.6.37.tar.xz
                              cd libpng-1.6.37
                              ./configure --prefix=/usr/local/libpng
                              make
                              sudo make install
                              sudo ln -s /usr/local/libpng/lib/pkgconfig/libpng.pc /usr/local/lib/pkgconfig/libpng.pc
                              sudo ln -s /usr/local/libpng/lib/pkgconfig/libpng16.pc /usr/local/lib/pkgconfig/libpng16.pc
                          
    13. libzipのコンパイルとインストール

                              curl -LO https://libzip.org/download/libzip-1.8.0.tar.xz
                              tar xf libzip-1.8.0.tar.xz
                              cd libzip-1.8.0
                              mkdir build
                              cd build
                              cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/libzip
                              make
                              sudo make install
                              sudo ln -s /usr/local/libzip/lib/pkgconfig/libzip.pc /usr/local/lib/pkgconfig/libzip.pc
                          
    14. zlibのコンパイルとインストール

                              curl -LO https://zlib.net/zlib-1.2.11.tar.xz
                              tar xf zlib-1.2.11.tar.xz
                              cd zlib-1.2.11
                              ./configure --prefix=/usr/local/zlib
                              make test
                              sudo make install
                              sudo ln -s /usr/local/zlib/lib/pkgconfig/zlib.pc /usr/local/lib/pkgconfig/zlib.pc
                          
  3. PHPのコンパイルとインストール

                    curl -LO https://www.php.net/distributions/php-8.0.8.tar.xz
                    tar xf php-8.0.8.tar.xz
                    cd php-8.0.8
                    ./configure --prefix=/usr/local/php \
                    --enable-cli \
                    --enable-mbstring \
                    --enable-xml \
                    --enable-fpm \
                    --enable-ftp \
                    --enable-exif \
                    --enable-fileinfo \
                    --enable-gd \
                    --enable-pcntl \
                    --enable-pdo \
                    --with-curl \
                    --with-curl=/usr \
                    --with-jpeg \
                    --with-openssl \
                    --with-iconv=/usr/local/libiconv \
                    --with-apxs2=/usr/local/apache2/bin/apxs \
                    --with-mysqli \
                    --with-pdo-mysql \
                    --with-zip \
                    --with-zlib
                    make
                    cd libs
                    install_name_tool -change "@rpath/libzip.5.dylib" \
                    "/usr/local/libzip/lib/libzip.5.dylib" \
                    libphp.so
                    cd ../
                    sudo make install
                    sudo ln -s /usr/local/php/bin/php /usr/local/bin/php
                
  4. php.iniのコピー、設定および設置
    phpの初期設定ファイルphp.iniは、ダウンロードしたソースコードフォルダphp-8.0.8直下にphp.ini-developmentおよびphp.ini-productionというファイル名で入っている。どちらかを選んでコピー、php.iniにリネームの上、以下のように設置する。(この設置場所はphp –iniを実行すると表示されるものに合わせている)

                    sudo cp -p php.ini /usr/local/php/lib
                

    設置前、つまりコピー&リネームした段階で、ファイルをテキストエディタで開き、PHP7.4 ぼくのかんがえたさいきょうのphp.iniを参照して編集すること。

  5. Apache側の設定(Apacheのhttpd.confにPHPを設定)
    PHPインストールによって、libphp.soは、/usr/local/apache2/modulesにコピーされ、httpd.confにもロードされるように書き込まれる。これを含めてhttpd.confを変更する方法と、PHPについての設定ファイルを作成、httpd.confに読み込ませる方法のどちらかを好みで使用されたい。

    1. httpd.confを変更する方法。変更をdiff形式で示す。

                              diff -u httpd.conf.bak httpd.conf
                              --- httpd.conf.bak	2021-07-18 17:03:59.000000000 +0900
                              +++ httpd.conf	2021-07-18 17:03:59.000000000 +0900
                              @@ -163,6 +163,7 @@
                               LoadModule userdir_module modules/mod_userdir.so
                               LoadModule alias_module modules/mod_alias.so
                               #LoadModule rewrite_module modules/mod_rewrite.so
                              +LoadModule php_module        modules/libphp.so
      
                               <IfModule unixd_module>
                               #
                              @@ -262,9 +263,13 @@
                               # is requested.
                               #
                               <IfModule dir_module>
                              -    DirectoryIndex index.html
                              +    DirectoryIndex index.php index.html
                               </IfModule>
      
                              +<FilesMatch \.php$>
                              +    SetHandler application/x-httpd-php
                              +</FilesMatch>
                              +
                               #
                               # The following lines prevent .htaccess and .htpasswd files from being 
                               # viewed by Web clients. 
                          
    2. PHP用設定ファイルを用意し、httpd.confに読み込ませる方法

      1. 共有オブジェクトファイルの準備

                                        cd php-8.0.8/libs
                                        sudo mkdir -p /usr/local/php/lib/httpd/modules
                                        sudo cp -p libphp.so /usr/local/php/lib/httpd/modules
                                    
      2. PHP用設定ファイル

                                        # httpd.confにphpをincludeする設定ファイル
                                        #
                                        # PHPの場所 : /usr/local/bin/php
                                        # 対象バージョン : PHP 8.0.8 (cli) (built: Jul 18 2021 16:57:35) ( ZTS )
                                        #
                                        # これ↓をhttpd.confに追記する
                                        #Include /usr/local/apache2/conf/extra/php.conf
        
                                        #
                                        # AddType allows you to add to or override the MIME configuration
                                        # file specified in TypesConfig for specific file types.
                                        #
                                        AddType application/x-httpd-php .php
        
                                        #
                                        # Dynamic Shared Object (DSO) Support
                                        #
                                        # To be able to use the functionality of a module which was built as a DSO you
                                        # have to place corresponding `LoadModule' lines at this location so the
                                        # directives contained in it are actually available _before_ they are used.
                                        # Statically compiled modules (those listed by `httpd -l') do not need
                                        # to be loaded here.
                                        #
                                        LoadModule php_module /usr/local/php/lib/httpd/modules/libphp.so
        
                                        #
                                        # DirectoryIndex: sets the file that Apache will serve if a directory
                                        # is requested.
                                        #
                                        <IfModule dir_module>
                                            DirectoryIndex index.php
                                        </IfModule>
        
                                        #
                                        # php.iniの場所
                                        #
                                        PHPIniDir "/usr/local/php/lib/php.ini"
                                    
      3. httpd.confの読み込み設定。変更をdiff形式で示す。

                                        diff -u httpd.conf.bak httpd.conf
                                        --- httpd.conf.bak	2021-07-19 12:34:39.000000000 +0900
                                        +++ httpd.conf	2021-07-19 12:46:56.000000000 +0900
                                        @@ -163,6 +163,7 @@
                                        LoadModule userdir_module modules/mod_userdir.so
                                        LoadModule alias_module modules/mod_alias.so
                                        #LoadModule rewrite_module modules/mod_rewrite.so
                                        +#LoadModule php_module         modules/libphp.so
                                        
                                        <IfModule unixd_module>
                                        #
                                        @@ -517,5 +518,5 @@
                                        SSLRandomSeed connect builtin
                                        </IfModule>
                                        
                                        +Include /usr/local/apache2/conf/extra/php.conf
                                        
                                    
  6. Apacheとphpの連携確認

                    echo "<?php phpinfo();?>" > ~/Sites/info.php
                

    ブラウザのアドレス欄にhttp://localhost/~user_name/info.phpと入力(user_nameは、ご自身のログイン名に変える)し、PHPの情報が表示されるのを確認する。

参考サイト

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL