さくらインターネットでsockets拡張モジュール(socketsエクステンション)を有効化する
あれ?どうするんだっけ?と本を開いたり、Webを漁ったりと情報集めしていくのがメンドイのでまとめました。ということで、あくまで自分の覚書です!なので説明が多々省かれています!ただ、同じようなニーズをお持ちの方は少なからずいると思うので、適宜参考にしていただければ幸いです。
LINE SDKを使おうとしたら・・・
composerでLINE SDKを入れようとしたら
requires ext-sockets * -> the requested PHP extension sockets is missing from your system.
こんなエラーが・・・。つまり、ソケット拡張モジュールが必要だと。phpifno()で確認すると確かに、ソケット拡張モジュールは有効になっていない。
う~むとググったところでは、php.iniを修正して有効化(extension=sockets)すればOKとあるけど・・・。レンタルサーバーでphp.iniは直接触れない・・・。
ということで、様々な情報を集約したところ、下記の手順でsockets拡張機能が有効化できることがわかったのでまとめておきます。
sockets拡張モジュールの有効化手順
さくらインターネットのレンタルサーバー上では、sockets拡張モジュールが用意されていません。そこで、下記の手順で有効化します。
ソースコードをPHPの公式サイトから入手
sockets拡張モジュールをビルド
生成したsockets拡張モジュール(sockets.so)を有効化
これらの手順はSSHで接続しレンタルサーバー上で行います。
PHPソースコードの入手
PHPソースコードの展開が可能なディレクトリに移動し、curl等でソースコードを取得。
※X.X.Xの部分は、現在適用しているPHPバージョン。
curl -O https://www.php.net/distributions/php-X.X.X.tar.gz
ダウンロードが完了したら、tar -xzvf php-X.X.X.tar.gzなどを使用してアーカイブを解凍する。
sockets拡張モジュールのビルド
解凍が完了したら、/php-X.X.X/ext/socketsに移動し、下記に示すコマンドを順に実行する。
【実行するコマンド】
phpize
./configure
make
make test ← ※実施しなくても問題はない
まず、phpizeを実行し、ビルドに必要なファイルやディレクトリを用意します。実行すると、下記のような出力が出ますが、PHP Api Versionなどに出力されている「20190902」の数字が、現在適用しているバージョンと合致していることを必ず確認してください。
Configuring for:
PHP Api Version: 20190902
Zend Module Api No: 20190902
Zend Extension Api No: 320190902
合致していなかった場合は、「phpize --clean」で一旦、準備されたものをリセットし、「/usr/local/php/X.X/bin/phpize」と現在適用しているメジャーバージョンのphpizeを実行します(X.Xは、適用中のメジャーバージョン)
次に、configureを実行します。先ほどのphpizeでバージョンが合致していなかった場合は、下記のように「--with-php-config」のオプションをつけて実行し、適用中のバージョンと合致するビルド環境を準備します(X.Xは適用中のメジャーバージョン)。
./configure --with-php-config=/usr/local/php/X.X/bin/php-config
これでビルド環境は準備できたので、makeでビルドします。
エラーでビルドが停止する際は、準備したビルド環境と適用中のメジャーバージョンに差異が発生している可能性がありますので、「phpize --clean」して、最初からやり直してください。
ビルドが終わると、modulesのデフォルトに「sockets.so」が生成されているので、必要に応じて任意の場所に「sockets.so」を移動します。
生成したsockets拡張モジュール(sockets.so)を有効化
生成したsockets拡張モジュールを有効化させるため、php.iniを編集します。
さくらインターネットには、個別の設定を反映するための環境が準備されているので、それを使います。
コントロールパネルのphp.ini設定に下記の記載を追記する。
extension_dir = /home/○○○/AAAAAA/
extension = sockets
extension_dirには、生成したsockets.soを保存したディレクトリのフルパスを記載します。extensionには、sockets.soのファイル名を変更していた場合は、extension = sockets_AAA.soなど、ファイル名を記載することで有効化されます。
保存した後、phpinfo()を確認し、Sockets Support が enabled になっていれば有効化成功です。
この表示がない場合は、生成したsockets.soとのメジャーバージョンが異なるなど別の要因の可能性がありますので、再度、この手順を最初からやり直してみてください。
これもお忘れなく
あれ?同じエラーが出る・・・
有効化したし、もう大丈夫だよね!ってLINE SDKを入れようとすると・・・同じエラー・・・あれ???
悩んだ末、気づいたのは、phpコマンドで自分用のphp.iniを読み込むようにしてあげないとエクステンションは相変わらず反映されていないままということ_| ̄|○ il||li
ということで、aliasを指定して、自分用のphp.iniを読み込むようにしたところ、無事LINE SDKがインストールできました。
alias php='/usr/local/bin/php -c /home/〇〇/www/php.ini'
念のため、.bashrなどのシェル設定にも上記のalias設定を記載しておくと、毎回、ハマらないで済むかと思います。
この記事が気に入ったらサポートをしてみませんか?