いつの間にかPHP5.6.xのEOLが……
コの業界において、意識していなければいけないことは多々あります。EOL——End Of Life1)サポート期間は、その中でも特に重要なもののひとつですね。
PHPerな私は、特にPHPのEOLは興味津々なわけです。
2015年末にPHP-7.0.x系、2016年末にPHP-7.1.x系がリリースされたこともあり、PHP-5.6.x系も終わりが見えてきましたね。2)それ以前のバージョンはすでにEOLですね3)ちなみに、ディストリビューションによっては
セキュリティフィックスなどをバックポートして
独自にアップデートを提供してたりもするっぽいです
さて、私の管理下にあるいくつかのサイトは、PHP-5.6.x系を使っています。
セキュリティサポート期間がまだ残っているので、時間的猶予はまだありますが……。「夏休みの宿題」よろしく締め切り間際に慌てるのは……アレですよね(;´Д`)
というわけで、手元のVagrantなCentOS7にPHP-7.1.34)このエントリを書いている時点の最新リリースなのでをインストールしてみようと思います
(`・ω・´)b
インストールしてみるよ〜
さて、サクッと試してみましょう。ここからはVagrantを使ってお試ししてみます。
なお、OSとしてはCentOS7、WebサーバはApache2.4.x系を使用しています。モジュール(mod_php〜)を使ったケースなので、nginxを使いたい人やFastCGIで使いたい人などには役に立たないエントリに仕上がっています。
まずはダウンロード
最初にミラーサイトからTarballをダウンロードし、展開します。このエントリでご紹介している手順の都合で、展開後のディレクトリ名も変更します。5)普通にインストールするなら、不要な手順です
$ wget -O php-7.1.3.tar.bz2 'http://jp2.php.net/get/php-7.1.3.tar.bz2/from/this/mirror' $ tar xjf ./php-7.1.3.tar.bz2 $ mv ./php-7.1.3 ./php71
基本的には、この後configureしてmakeしてmake installすればインストールされます。
一応、オフィシャルのダウンロードページを載せておきますね。
PHP: Downloads via kwout
そしてconfigure
……が、そこそこconfigureのオプションを指定したいってのもあり、バージョンアップの度にそれタイプしたくないってのもありで……。
簡単なbashスクリプトを書きました。
中身的にはただconfigureのオプションがつらつら書いてある6)一応、「./configure –help」のカテゴリ/ブロックごとに分けられているはず……だけです。GitHubのGistにアップしてありますので、embedしておきます。
コイツを何らかの方法でゲットします。7)gitでcloneしてもよし。
ダウンロードしてSFTPかなにかでアップしてもよし。必要に応じて、configureオプションの調整をお忘れなく。8)指定できるブツの一覧は、「bash ./php71/configure –help」でチェック!そしたら、Tarballと同階層に配置&実行すればOK!
$ bash ./build_php71.sh (略)
ずらずらとconfigureの出力が流れてきて、うまいこと終われば下記みたいに出力されるはず。
Thank you for using PHP. config.status: creating php7.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands $
参考:エラーになったらどうすればいいの?(´・ω・`)
そうでなくて下記みたいに「error」の文字が見えたら……。たぶん、必要なライブラリとかが不足しています。9)たぶん、開発関係のパッケージ
checking for GD support... yes checking for the location of libwebp... yes checking for the location of libjpeg... yes checking for the location of libpng... yes checking for the location of libXpm... yes checking for FreeType 2... yes checking whether to enable truetype string function in GD... yes checking whether to enable JIS-mapped Japanese font support in GD... yes configure: error: webp/decode.h not found.
例えばこの例10)適当に必要なライブラリを消して出したエラーなので、
あくまで例示だとおもってね(はぁとだと、「webp/decode.h」が見つからないと出ています。
ナニモノかは知りませんが、webpのC/C++言語のヘッダファイルらしきものが見つからないようです。そいつのありかを探しましょう。
とりあえず、「webp」ってのをキーワードにして探してみます。
$ yum search webp (略) libwebp.i686 : Library and tools for the WebP graphics format libwebp.x86_64 : Library and tools for the WebP graphics format libwebp-devel.i686 : Development files for libwebp, a library for the WebP format libwebp-devel.x86_64 : Development files for libwebp, a library for the WebP format libwebp-java.x86_64 : Java bindings for libwebp, a library for the WebP format libwebp-tools.x86_64 : The WebP command line tools (略)
それっぽいのが見つかりました。そいつらをインストールしてみましょう。
$ sudo yum install libwebp libwebp-devel libwebp-tools (略)
もう一度、先のスクリプトを実行すれば……。このエラーは消えるはずです。
違うエラーが出るかもしれませんが、この要領で不足しているブツをインストールしていけばいつかはビルドが成功するはずです。
ビルドしてインストールするよ〜
ここまで終われば、ほとんど作業が終わったも同然。
下記コマンドで、ビルドしちゃいましょう。
$ make (略)
ちょっと時間がかかるので、お茶でも飲みながらマッタリ待ちます。
正常に終わると、下記のような表示になります。
Generating phar.php Generating phar.phar PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. directorytreeiterator.inc directorygraphiterator.inc pharcommand.inc clicommand.inc invertedregexiterator.inc phar.inc Build complete. Don't forget to run 'make test'.
なお、「Dont’t forget〜」と出てますが、今回は忘れることにします。
続いて、インストール。これは下記のコマンドでOKです。
$ sudo make install (略)
こうすると、「/usr/local/php71」にPHP-7.1.3が一式インストールされます。
インストールされる場所が気にくわなければ、「build_php71.sh」中の「–prefix」オプションで指定しているパスをお好みのものに書き換えてください。
シンボリックリンクさんに頼る
このままでもいいんですけど、CLIで使いたい時にフルパスで指定する必要があります。なぜなら、「/usr/local/php71」配下にはパスが通っていませんので。
パスを通してもいいですが、今回は「/usr/local/bin」にシンボリックリンクを作ることにします。例によってbashスクリプトっぽい感じでGistにアップしてあります。
Apacheのコンフィグをチェックする。
手元の環境ではApache2.4系を使っています。
ので、Apacheさん経由でPHP-7.1.3が使えるようになっているかチェックしてみます。
使えるようになっていれば、下記のような記述が含まれているはずです。どこにも存在しなければ、「LoadModule〜」がいっぱい書いてあるブロックの一番下あたりに下記を追加しましょう。
LoadModule php7_module modules/libphp7.so <IfModule mod_php7.c> AddType application/x-httpd-php .php .inc </IfModule>
ちなみに、ずっとPHP-5.6.xを使っていた環境などでは、下記のような記述が含まれているかもしれません。
LoadModule php5_module modules/libphp5.so <IfModule mod_php5.c> AddType application/x-httpd-php .php .inc </IfModule>
これが残っているとsegfaultなどでApacheが落ちて起動しなくなります。11)これに気づかず、1時間くらい頭を悩ませた系似非エンジニアが私ですコメントアウトしておくか、いっそばっさり消してしまいましょう。
php.iniを配置する
PHPの設定ファイルである「php.ini」を配置しましょう。
先の「build_php71.sh」では、「/usr/local/apache2/conf」配下に配置するアレになっています。気に入らなければ、「–with-config-file-path」のアレを変更してください。
ゼロから作るのは大変ですし無意味ですので、ベースとなるコンフィグを元にアレしていきましょう。
Tarballを展開してできたディレクトリ中に、「php.ini-development」と「php.ini-production」の2ファイルが存在します。
前者が開発環境向け、後者が本番環境向けの「ひな形」12)あくまで「ひな形」なので注意ですね。今回は「php.ini-production」をベースにコンフィグを見ていきましょう。
とりあえず、動作検証に使う用……ということで、私は下記のようなコンフィグにしてみました。例によって、Gistにアップしているのをembedしようと思ったのですが、長いのでリンクだけ貼っておきます。
なお、このコンフィグにはxdebugの設定も含まれています。……が、ここまでの手順ではxdebugのインストールなどはやっていないので使えません。
xdebugまわりについては、別なエントリで書こうと思います。長くなるので。
Apacheを(再)起動しよう!
ここまでくれば、あとはApacheを再起動するだけでOK!
$ sudo systemctl restart httpd
ドキュメントルートにテキトーなPHPスクリプトを置いて動作確認します。例えば、下記のようなヤツですね。
<?php phpinfo();
こんな感じになっていれば、ちゃんと動いているはず!やったね!
さあ!検証しよう!
環境ができあがったので、既存のPHPスクリプトがちゃんと動くのかを検証しましょう。
……ここからが長い道のりなんだよなぁ……(遠い目
ちなみに、こんな面倒なことしなくてもREMIさんところにパッケージが用意されています。
何も考えず抽出した一覧を載せておきますね〜!
$ yum search php71 --enablerepo=remi (略) php71-php-pecl-mysql-xdevapi-devel.x86_64 : php71-php-pecl-mysql-xdevapi developer files (header) php71-php-pecl-propro-devel.x86_64 : php71-php-pecl-propro developer files (header) php71-php-pecl-raphf-devel.x86_64 : php71-php-pecl-raphf developer files (header) php71-php-pecl-xmldiff-devel.x86_64 : php71-php-pecl-xmldiff developer files (header) php71-php-pecl-yaconf-devel.x86_64 : php71-php-pecl-yaconf developer files (header) php71-runtime.x86_64 : Package that handles php71 Software Collection. php71-scldevel.x86_64 : Package shipping development files for php71 php71.x86_64 : Package that installs PHP 7.1 php71-build.x86_64 : Package shipping basic build configuration php71-php.x86_64 : PHP scripting language for creating dynamic web sites php71-php-ast.x86_64 : Abstract Syntax Tree php71-php-bcmath.x86_64 : A module for PHP applications for using the bcmath library php71-php-channel-horde.noarch : Adds pear.horde.org channel to PEAR php71-php-cli.x86_64 : Command-line interface for PHP php71-php-common.x86_64 : Common files for PHP php71-php-dba.x86_64 : A database abstraction layer module for PHP applications php71-php-dbg.x86_64 : The interactive PHP debugger php71-php-devel.x86_64 : Files needed for building PHP extensions php71-php-embedded.x86_64 : PHP library for embedding in applications php71-php-enchant.x86_64 : Enchant spelling extension for PHP applications php71-php-fpm.x86_64 : PHP FastCGI Process Manager php71-php-gd.x86_64 : A module for PHP applications for using the gd graphics library php71-php-geos.x86_64 : PHP module for GEOS php71-php-gmp.x86_64 : A module for PHP applications for using the GNU MP library php71-php-horde-horde-lz4.x86_64 : Horde LZ4 Compression Extension php71-php-imap.x86_64 : A module for PHP applications that use IMAP php71-php-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases php71-php-intl.x86_64 : Internationalization extension for PHP applications php71-php-json.x86_64 : JavaScript Object Notation extension for PHP php71-php-ldap.x86_64 : A module for PHP applications that use LDAP php71-php-libvirt.x86_64 : PHP language binding for Libvirt php71-php-libvirt-doc.noarch : Document of php-libvirt php71-php-litespeed.x86_64 : LiteSpeed Web Server PHP support php71-php-lz4.x86_64 : LZ4 Extension for PHP php71-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling php71-php-mcrypt.x86_64 : Standard PHP module provides mcrypt library support php71-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases php71-php-oci8.x86_64 : A module for PHP applications that use OCI8 databases php71-php-odbc.x86_64 : A module for PHP applications that use ODBC databases php71-php-opcache.x86_64 : The Zend OPcache php71-php-pdo.x86_64 : A database access abstraction module for PHP applications php71-php-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases php71-php-pear.noarch : PHP Extension and Application Repository framework php71-php-pecl-amqp.x86_64 : Communicate with any AMQP compliant server php71-php-pecl-apcu.x86_64 : APC User Cache php71-php-pecl-apcu-bc.x86_64 : APCu Backwards Compatibility Module php71-php-pecl-apcu-devel.x86_64 : APCu developer files (header) php71-php-pecl-apfd.x86_64 : Always Populate Form Data php71-php-pecl-apm.x86_64 : Alternative PHP Monitor php71-php-pecl-bitset.x86_64 : BITSET library php71-php-pecl-cassandra.x86_64 : DataStax PHP Driver for Apache Cassandra php71-php-pecl-couchbase2.x86_64 : Couchbase Server PHP extension php71-php-pecl-crypto.x86_64 : Wrapper for OpenSSL Crypto Library php71-php-pecl-dbase.x86_64 : dBase database file access functions php71-php-pecl-dio.x86_64 : Direct I/O functions php71-php-pecl-druid.x86_64 : A Druid driver for PHP php71-php-pecl-ds.x86_64 : Data Structures for PHP php71-php-pecl-eio.x86_64 : Provides interface to the libeio library php71-php-pecl-env.x86_64 : Load environment variables php71-php-pecl-ev.x86_64 : Provides interface to libev library php71-php-pecl-event.x86_64 : Provides interface to libevent library php71-php-pecl-fann.x86_64 : Wrapper for FANN Library php71-php-pecl-gearman.x86_64 : PHP wrapper to libgearman php71-php-pecl-gender.x86_64 : Gender Extension php71-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places php71-php-pecl-geospatial.x86_64 : PHP Extension to handle common geospatial functions php71-php-pecl-gmagick.x86_64 : Provides a wrapper to the GraphicsMagick library php71-php-pecl-gnupg.x86_64 : Wrapper around the gpgme library php71-php-pecl-hdr-histogram.x86_64 : PHP extension wrapper for the C hdrhistogram API php71-php-pecl-hprose.x86_64 : Hprose for PHP php71-php-pecl-hrtime.x86_64 : High resolution timing php71-php-pecl-http.x86_64 : Extended HTTP support php71-php-pecl-http-devel.x86_64 : Extended HTTP support developer files (header) php71-php-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer php71-php-pecl-igbinary-devel.x86_64 : Igbinary developer files (header) php71-php-pecl-imagick.x86_64 : Extension to create and modify images using ImageMagick php71-php-pecl-imagick-devel.x86_64 : imagick extension developer files (header) php71-php-pecl-inotify.x86_64 : Inotify php71-php-pecl-json-post.x86_64 : JSON POST handler php71-php-pecl-krb5.x86_64 : Kerberos authentification extension php71-php-pecl-krb5-devel.x86_64 : Kerberos extension developer files (header) php71-php-pecl-libsodium.x86_64 : Wrapper for the Sodium cryptographic library php71-php-pecl-lua.x86_64 : Embedded lua interpreter php71-php-pecl-lzf.x86_64 : Extension to handle LZF de/compression php71-php-pecl-mailparse.x86_64 : PHP PECL package for parsing and working with email messages php71-php-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon php71-php-pecl-memcached.x86_64 : Extension to work with the Memcached caching daemon php71-php-pecl-memprof.x86_64 : Memory usage profiler php71-php-pecl-mogilefs.x86_64 : PHP client library to communicate with the MogileFS storage php71-php-pecl-mongodb.x86_64 : MongoDB driver for PHP php71-php-pecl-mosquitto.x86_64 : Extension for libmosquitto php71-php-pecl-msgpack.x86_64 : API for communicating with MessagePack serialization php71-php-pecl-msgpack-devel.x86_64 : MessagePack developer files (header) php71-php-pecl-mysql.x86_64 : MySQL database access functions php71-php-pecl-mysql-xdevapi.x86_64 : MySQL database access functions php71-php-pecl-oauth.x86_64 : PHP OAuth consumer extension php71-php-pecl-pcs.x86_64 : PHP Code Service php71-php-pecl-pcs-devel.x86_64 : PHP Code Service (header) php71-php-pecl-pdflib.x86_64 : Package for generating PDF files php71-php-pecl-pq.x86_64 : PostgreSQL client library (libpq) binding php71-php-pecl-propro.x86_64 : Property proxy php71-php-pecl-radius.x86_64 : Radius client library php71-php-pecl-raphf.x86_64 : Resource and persistent handles factory php71-php-pecl-rdkafka.x86_64 : Kafka client based on librdkafka php71-php-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store php71-php-pecl-ref.x86_64 : Soft and Weak references support in PHP php71-php-pecl-request.x86_64 : Server-side request and response objects php71-php-pecl-rrd.x86_64 : PHP Bindings for rrdtool php71-php-pecl-scrypt.x86_64 : Scrypt hashing function php71-php-pecl-seaslog.x86_64 : A effective,fast,stable log extension for PHP php71-php-pecl-selinux.x86_64 : SELinux binding for PHP scripting language php71-php-pecl-solr2.x86_64 : API orientée objet pour Apache Solr php71-php-pecl-ssdeep.x86_64 : Wrapper for libfuzzy library php71-php-pecl-ssh2.x86_64 : Bindings for the libssh2 library php71-php-pecl-stats.x86_64 : Routines for statistical computation php71-php-pecl-stomp.x86_64 : Stomp client extension php71-php-pecl-swoole.x86_64 : PHP's asynchronous concurrent distributed networking framework php71-php-pecl-swoole-serialize.x86_64 : Fast and Small serialize php71-php-pecl-swoole2.x86_64 : PHP's asynchronous concurrent distributed networking framework php71-php-pecl-sync.x86_64 : Named and unnamed synchronization objects php71-php-pecl-taint.x86_64 : XSS code sniffer php71-php-pecl-tcpwrap.x86_64 : Tcpwrappers binding php71-php-pecl-termbox.x86_64 : A termbox wrapper for PHP php71-php-pecl-trace.x86_64 : Trace is a low-overhead tracing tool for PHP php71-php-pecl-trader.x86_64 : Technical Analysis for traders php71-php-pecl-translit.x86_64 : Transliterates non-latin character sets to latin php71-php-pecl-ui.x86_64 : UI API php71-php-pecl-uopz.x86_64 : User Operations for Zend php71-php-pecl-uploadprogress.x86_64 : An extension to track progress of a file upload php71-php-pecl-uuid.x86_64 : Universally Unique Identifier extension for PHP php71-php-pecl-uv.x86_64 : Libuv wrapper php71-php-pecl-varnish.x86_64 : Varnish Cache bindings php71-php-pecl-vips.x86_64 : PHP extension for interfacing with libvips php71-php-pecl-vld.x86_64 : Dump the internal representation of PHP scripts php71-php-pecl-weakref.x86_64 : Implementation of weak references php71-php-pecl-xattr.x86_64 : Extended attributes php71-php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php71-php-pecl-xdiff.x86_64 : File differences/patches php71-php-pecl-xmldiff.x86_64 : XML diff and merge php71-php-pecl-xxtea.x86_64 : XXTEA encryption algorithm extension for PHP php71-php-pecl-yac.x86_64 : Lockless user data cache php71-php-pecl-yaconf.x86_64 : Yet Another Configurations Container php71-php-pecl-yaf.x86_64 : Yet Another Framework php71-php-pecl-yaml.x86_64 : PHP Bindings for yaml php71-php-pecl-yar.x86_64 : Light, concurrent RPC framework php71-php-pecl-yaz.x86_64 : Z39.50/SRU client php71-php-pecl-zip.x86_64 : Une extension de gestion des ZIP php71-php-pecl-zmq.x86_64 : ZeroMQ messaging php71-php-pgsql.x86_64 : A PostgreSQL database module for PHP php71-php-phalcon3.x86_64 : Phalcon Framework php71-php-phpiredis.x86_64 : Client extension for Redis php71-php-pinba.x86_64 : Client extension for Pinba statistics server php71-php-process.x86_64 : Modules for PHP script using system process interfaces php71-php-pspell.x86_64 : A module for PHP applications for using pspell interfaces php71-php-recode.x86_64 : A module for PHP applications for using the recode library php71-php-smbclient.x86_64 : PHP wrapper for libsmbclient php71-php-snappy.x86_64 : Snappy Extension for PHP php71-php-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices php71-php-soap.x86_64 : A module for PHP applications that use the SOAP protocol php71-php-sqlsrv.x86_64 : Microsoft Drivers for PHP for SQL Server php71-php-tarantool.x86_64 : PHP driver for Tarantool/Box php71-php-tidy.x86_64 : Standard PHP module provides tidy library support php71-php-twig.noarch : The flexible, fast, and secure template engine for PHP php71-php-xml.x86_64 : A module for PHP applications which use XML php71-php-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol php71-zephir.noarch : Zephir language for creation of extensions for PHP. php71-zephir-parser.x86_64 : Zephir parser extension (略)
注訳はこちら
↑1 | サポート期間 |
---|---|
↑2 | それ以前のバージョンはすでにEOLですね |
↑3 | ちなみに、ディストリビューションによっては セキュリティフィックスなどをバックポートして 独自にアップデートを提供してたりもするっぽいです |
↑4 | このエントリを書いている時点の最新リリースなので |
↑5 | 普通にインストールするなら、不要な手順です |
↑6 | 一応、「./configure –help」のカテゴリ/ブロックごとに分けられているはず…… |
↑7 | gitでcloneしてもよし。 ダウンロードしてSFTPかなにかでアップしてもよし。 |
↑8 | 指定できるブツの一覧は、「bash ./php71/configure –help」でチェック! |
↑9 | たぶん、開発関係のパッケージ |
↑10 | 適当に必要なライブラリを消して出したエラーなので、 あくまで例示だとおもってね(はぁと |
↑11 | これに気づかず、1時間くらい頭を悩ませた系似非エンジニアが私です |
↑12 | あくまで「ひな形」なので注意 |