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