PHPのExtension zlibをコンパイルする

追記
本稿は、PHP 7.4.x以下向けの記事である。PHP 8.0.x以降では必要ない。

主題
PHPのExtension zlibをコンパイルする手順を述べる。

背景
WordPressを動作させるためには、PHPがzlibをサポートしている必要があるが、外部ライブラリとしてインストールしただけでは、サポートされない。(以下のように表示される)

        php -i | grep zlib
        gzip compression => disabled (install ext/zlib)
    

本稿では、PHP extenshinの一つであるzlibをコンパイルする手順を説明する。

手順

  1. まず、こちらの手順に従って、PHPをコンパイルし、インストールする。

  2. 下準備
    シンボリックリンクを張りまくる。これが終われば、ほとんど完成である。と、考えたが、検証でめげたのでシェルスクリプトにした。

    以下の内容をコピーし、prepare_zlib.shというファイル名でデスクトップに保存する。スクリプトには実行権を付与すること。なお、スクリプトはこちらからダウンロードすることもできる。

                    #!/bin/sh
                
                    ln -nfs config0.m4 config.m4
                    ln -nfs ../../main/SAPI.h SAPI.h
                    ln -nfs ../../TSRM/TSRM.h TSRM.h
                    ln -nfs ../../main/build-defs.h build-defs.h
                    ln -nfs ../../main/fopen_wrappers.h fopen_wrappers.h
                    ln -nfs ../../main/php.h php.h
                    ln -nfs ../../main/php_compat.h php_compat.h
                    ln -nfs ../../main/php_globals.h php_globals.h
                    ln -nfs ../../main/php_ini.h php_ini.h
                    ln -nfs ../../main/php_memory_streams.h php_memory_streams.h
                    ln -nfs ../../main/php_network.h php_network.h
                    ln -nfs ../../main/php_reentrancy.h php_reentrancy.h
                    ln -nfs ../../main/php_streams.h php_streams.h
                    ln -nfs ../../main/php_syslog.h php_syslog.h
                    ln -nfs ../../main/php_version.h php_version.h
                    ln -nfs ../../main/snprintf.h snprintf.h
                    ln -nfs ../../main/spprintf.h spprintf.h
                    ln -nfs ../../Zend/zend.h zend.h
                    ln -nfs ../../Zend/zend_API.h zend_API.h
                    ln -nfs ../../Zend/zend_alloc.h zend_alloc.h
                    ln -nfs ../../Zend/zend_alloc_sizes.h zend_alloc_sizes.h 
                    ln -nfs ../../Zend/zend_arena.h zend_arena.h
                    ln -nfs ../../Zend/zend_ast.h zend_ast.h
                    ln -nfs ../../Zend/zend_build.h zend_build.h
                    ln -nfs ../../Zend/zend_compile.h zend_compile.h
                    ln -nfs ../../Zend/zend_config.h zend_config.h
                    ln -nfs ../../Zend/zend_constants.h zend_constants.h
                    ln -nfs ../../Zend/zend_errors.h zend_errors.h
                    ln -nfs ../../Zend/zend_execute.h zend_execute.h
                    ln -nfs ../../Zend/zend_float.h zend_float.h
                    ln -nfs ../../Zend/zend_gc.h zend_gc.h
                    ln -nfs ../../Zend/zend_globals.h zend_globals.h
                    ln -nfs ../../Zend/zend_globals_macros.h
                    ln -nfs ../../Zend/zend_hash.h zend_hash.h
                    ln -nfs ../../Zend/zend_ini.h zend_ini.h
                    ln -nfs ../../Zend/zend_iterators.h zend_iterators.h
                    ln -nfs ../../Zend/zend_list.h zend_list.h
                    ln -nfs ../../Zend/zend_llist.h zend_llist.h
                    ln -nfs ../../Zend/zend_long.h zend_long.h
                    ln -nfs ../../Zend/zend_map_ptr.h zend_map_ptr.h
                    ln -nfs ../../Zend/zend_modules.h zend_modules.h
                    ln -nfs ../../Zend/zend_multibyte.h zend_multibyte.h
                    ln -nfs ../../Zend/zend_multiply.h zend_multiply.h
                    ln -nfs ../../Zend/zend_object_handlers.h zend_object_handlers.h
                    ln -nfs ../../Zend/zend_objects.h zend_objects.h
                    ln -nfs ../../Zend/zend_objects_API.h zend_objects_API.h
                    ln -nfs ../../Zend/zend_operators.h zend_operators.h
                    ln -nfs ../../Zend/zend_portability.h zend_portability.h
                    ln -nfs ../../Zend/zend_ptr_stack.h zend_ptr_stack.h
                    ln -nfs ../../Zend/zend_range_check.h zend_range_check.h
                    ln -nfs ../../Zend/zend_signal.h zend_signal.h
                    ln -nfs ../../Zend/zend_smart_str_public.h zend_smart_str_public.h
                    ln -nfs ../../Zend/zend_smart_string_public.h zend_smart_string_public.h
                    ln -nfs ../../Zend/zend_sort.h zend_sort.h
                    ln -nfs ../../Zend/zend_stack.h zend_stack.h
                    ln -nfs ../../Zend/zend_stream.h zend_stream.h
                    ln -nfs ../../Zend/zend_string.h zend_string.h
                    ln -nfs ../../Zend/zend_strtod.h zend_strtod.h
                    ln -nfs ../../Zend/zend_types.h zend_types.h
                    ln -nfs ../../Zend/zend_variables.h zend_variables.h
                    ln -nfs ../../Zend/zend_virtual_cwd.h zend_virtual_cwd.h
                    ln -nfs ../../Zend/zend_vm_opcodes.h zend_vm_opcodes.h
                    mkdir -p TSRM
                    cd TSRM
                    ln -nfs ../../../TSRM/TSRM.h TSRM.h
                    mkdir -p main
                    cd main
                    ln -nfs ../../../../main/php_stdint.h php_stdint.h
                    cd ../../
                    mkdir -p ext/standard
                    cd ext/standard
                    ln -nfs ../../../standard/file.h file.h
                    ln -nfs ../../../standard/info.h info.h
                    ln -nfs ../../../standard/php_string.h php_string.h
                    cd ../../
                    mkdir -p main
                    cd main
                    ln -nfs ../../../main/php_config.h php_config.h
                    ln -nfs ../../../main/php_network.h php_network.h
                    ln -nfs ../../../main/php_output.h php_output.h
                    ln -nfs ../../../main/php_stdint.h php_stdint.h
                    cd ../
                    mkdir -p streams
                    cd streams
                    ln -nfs ../../../main/streams/php_stream_context.h php_stream_context.h
                    ln -nfs ../../../main/streams/php_stream_filter_api.h php_stream_filter_api.h
                    ln -nfs ../../../main/streams/php_stream_glob_wrapper.h php_stream_glob_wrapper.h
                    ln -nfs ../../../main/streams/php_stream_mmap.h php_stream_mmap.h
                    ln -nfs ../../../main/streams/php_stream_plain_wrapper.h php_stream_plain_wrapper.h
                    ln -nfs ../../../main/streams/php_stream_transport.h php_stream_transport.h
                    ln -nfs ../../../main/streams/php_stream_userspace.h php_stream_userspace.h
                

    スクリプトの実行

                    cd php-7.4.12/ext/zlib
                    cp ~/Desktop/prepare_zlib.sh .
                    ./prepare_zlib.sh
                
  3. phpizeのシンボリックリンクを貼る

                    sudo ln -s /usr/local/php-7.4.12/bin/phpize \
                    /usr/local/bin/phpize
                
  4. コンパイルとインストール

                    cd php-7.4.12/ext/zlib
                    phpize
                    ./configure
                    make
                    cd modules
                    sudo cp -p zlib.so /usr/local/php-7.4.12/lib/php/extensions/no-debug-zts-20190902
                
  5. php.iniの編集
    php.iniを編集しzlib拡張機能を有効化する。

                    cd /usr/local/php-7.4.12/lib
                    sudo nano php.ini
                

    記載内容

                    extension=zlib
                

    確認

                    php -i | grep zlib
                
                    Registered PHP Streams => https, ftps, php, file, glob, data, http, ftp, compress.zlib, zip, phar
                    Registered Stream Filters => convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, zlib.*
                    zlib
                    Stream Wrapper => compress.zlib://
                    Stream Filter => zlib.inflate, zlib.deflate
                    zlib.output_compression => Off => Off
                    zlib.output_compression_level => -1 => -1
                    zlib.output_handler => no value => no value
                
  6. Apacheの再起動

                    sudo apachectl -k stop
                    sudo apachectl -k start
                

    Webサーバーでの確認
    以下のようなリンクを開き、出力内容にZlibの項目があることを確認する。

                    http://localhost/~yourLoginName/info.php
                


    zlib有効化のWebサーバー上での確認

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

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

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

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

トラックバック URL