PHP7.3とApacheを連携させる方法

June 21,2021 11:55 PM
Category:[Linux]
Tag:[Apache, Linux, PHP]
Permalink

PHP7.3とApacheを連携させる方法を紹介します。

1.問題点

PHPとApacheを連携させるためには、libphpXX.soというApacheモジュールが必要です。

このモジュールはPHPインストール時に自動的に設定されるようですが、今回PHP7.3をyumでインストールした際に、このApacheモジュールがありませんでした。

理由は、apxs(APache eXtenSion tool)というコマンドがLinuxにインストールされていなかったためです。

apxsのインストールは「Linux(CentOS)でapxsがみつからない場合の対処」をご覧ください。

本記事では、そのあとApacheと連係させる方法を紹介します。

特殊なケースと思いますが、参考になれば幸いです。

2.PHP7.3とApacheを連携させる方法

Apacheモジュール(libphp7.so)を、PHPのソースをコンパイルにより生成します。

PHP7.3のソースをダウンロード。wgetできない場合、URLからアーカイブをダウンロードします。

# wget --trust-server-names https://www.php.net/distributions/php-7.3.25.tar.gz

アーカイブを展開し、展開したディレクトリに移動。

# tar -zxvf php-7.3.25.tar.gz
# cd php-7.3.25

./configureの実行。"--with-apxs2=/usr/sbin/apxs"でapxsのパスを指定します。指定しないとlibphp7.soが生成されないので注意してください。

# ./configure --with-apxs2=/usr/sbin/apxs

libxml2など、./configureでエラーが発生する場合は適宜パッケージをインストールしてください。

余談で、libxml2-2.9.9.tar.gz(http://xmlsoft.org/download/)をインストールしましたが、python関連のエラーを避けたいため、./configureで下記のようにしました。

# tar -zxvf libxml2-2.9.9.tar.gz
# cd libxml2-2.9.9
# ./configure --with-python=no
# make
# make install

話を戻して、PHPの./configureが成功後、コンパイルします。

# make

これでlibs配下にlibphp7.soが生成されました。

# cd libs
# ls -l
total 34876
-rw-r--r-- 1 root root     1057 Apr 29 19:53 libphp7.la
-rwxr-xr-x 1 root root 35707918 Apr 29 19:53 libphp7.so

make installは実行せず、libphp7.soを/etc/httpd/modulesにコピー。

# cp libphp7.so /etc/httpd/modules/

あとは、httpd.confに下記の設定を追加します。

LoadModule php7_module modules/libphp7.so
 :
<FilesMatch \.php$>
     SetHandler application/x-httpd-php
</FilesMatch>

設定後、サーバを再起動。

# service httpd restart

これでブラウザからPHPファイルにアクセスして正常に表示されればOKです。

ビルドしたときのphp-7.3.25ディレクトリは削除してください。

Comments [0] | Trackbacks [0]

CentOS 6にPHP7.3をインストールする方法

June 9,2021 11:55 PM
Category:[Linux]
Tag:[Linux, PHP]
Permalink

CentOS 6にPHP7.3をインストールする方法を紹介します。

1.問題点

CentOS 6にyumでPHPをインストールすると、7.3のremiリポジトリを指定しても、5.3.3という古いバージョンがインストールされてしまいます(下記)。

# yum install --skip-broken --enablerepo=remi-php73 php php-cli php-common php-devel php-gd php-mbstring php-mcrypt php-mysqlnd php-pdo php-pear php-pecl-jsonc php-pecl-jsonc-devel php-process php-xml
Loaded plugins: fastestmirror, priorities, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * epel: ftp.iij.ad.jp
 * remi-php73: ftp.riken.jp
 * remi-safe: ftp.riken.jp
245 packages excluded due to repository priority protections
Package php-mcrypt is obsoleted by php-pecl-mcrypt, trying to install php-pecl-mcrypt-1.0.3-1.el6.remi.7.3.x86_64 instead
No package php-pecl-jsonc available.
No package php-pecl-jsonc-devel available.
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-cli.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-common.x86_64 0:5.3.3-50.el6_10 will be installed
 :
---> Package php-process.x86_64 0:5.3.3-50.el6_10 will be installed
---> Package php-xml.x86_64 0:5.3.3-50.el6_10 will be installed
--> Finished Dependency Resolution
 
Packages skipped because of dependency problems:
    php-mysqlnd-7.3.25-1.el6.remi.x86_64 from remi-php73
    php-pecl-mcrypt-1.0.3-1.el6.remi.7.3.x86_64 from remi-php73
 
Dependencies Resolved
 
===============================================================================================================================================================================
 Package                                     Arch                               Version                                           Repository                              Size
===============================================================================================================================================================================
Installing:
 php                                         x86_64                             5.3.3-50.el6_10                                   updates                                1.1 M
 php-cli                                     x86_64                             5.3.3-50.el6_10                                   updates                                2.2 M
 php-common                                  x86_64                             5.3.3-50.el6_10                                   updates                                530 k
 php-devel                                   x86_64                             5.3.3-50.el6_10                                   updates                                513 k
 php-gd                                      x86_64                             5.3.3-50.el6_10                                   updates                                112 k
 php-mbstring                                x86_64                             5.3.3-50.el6_10                                   updates                                460 k
 php-pdo                                     x86_64                             5.3.3-50.el6_10                                   updates                                 80 k
 php-pear                                    noarch                             1:1.9.4-5.el6                                     base                                   393 k
 php-process                                 x86_64                             5.3.3-50.el6_10                                   updates                                 44 k
 php-xml                                     x86_64                             5.3.3-50.el6_10                                   updates                                108 k
Skipped (dependency problems):
 php-mysqlnd                                 x86_64                             7.3.25-1.el6.remi                                 remi-php73                             216 k
 php-pecl-mcrypt                             x86_64                             1.0.3-1.el6.remi.7.3                              remi-php73                              27 k
 
Transaction Summary
===============================================================================================================================================================================
Install      10 Package(s)
(後略)

ということで、CentOS 6にPHP7.3をインストールする方法を紹介します。

以下のサンプルはrootユーザーで実行しています。そうでない場合、suでroot権限実行するよう、適宜変更してください。

なお、CentOS 6はサポートが2020年11月30日に終了しているので、後述のyum installで下記のエラーが発生する場合、

Loaded plugins: fastestmirror, priorities, security
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt

リポジトリリスト (/etc/yum.repos.d/CentOS-Base.repo) のURLを、パッケージが公開されているvault.centos.orgへ変更してください。

# sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
# sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

2.CentOS 6にPHP7.3をインストールする

CentOSを最新化します(少し時間がかかります)。

# yum update

完了後、サーバを再起動。

# shutdown -r now

現在のPHPパッケージをアンインストールします。

PHPのパッケージをアンインストールするのは「yum remove php*」「yum remove php-*」です。

# yum remove php*
 : 
Removed:
  php.x86_64 0:5.3.3-50.el6_10                php-cli.x86_64 0:5.3.3-50.el6_10             php-common.x86_64 0:5.3.3-50.el6_10        php-devel.x86_64 0:5.3.3-50.el6_10
  php-gd.x86_64 0:5.3.3-50.el6_10             php-mbstring.x86_64 0:5.3.3-50.el6_10        php-pdo.x86_64 0:5.3.3-50.el6_10           php-pear.noarch 1:1.9.4-5.el6
  php-process.x86_64 0:5.3.3-50.el6_10        php-xml.x86_64 0:5.3.3-50.el6_10
 
Complete!
# yum remove php-*
 : 
Removed:
  php-bcmath.x86_64 0:5.3.3-50.el6_10    php-common.x86_64 0:5.3.3-50.el6_10   php-fedora-autoloader.noarch 0:1.0.1-2.el6  php-gd.x86_64 0:5.3.3-50.el6_10
  php-mbstring.x86_64 0:5.3.3-50.el6_10  php-mcrypt.x86_64 0:5.3.3-5.el6       php-mysql.x86_64 0:5.3.3-50.el6_10          php-pdo.x86_64 0:5.3.3-50.el6_10
  php-php-gettext.noarch 0:1.0.12-1.el6  php-process.x86_64 0:5.3.3-50.el6_10  php-tcpdf.noarch 0:6.2.26-1.el6             php-tcpdf-dejavu-sans-fonts.noarch 0:6.2.26-1.el6
  php-tidy.x86_64 0:5.3.3-50.el6_10      php-xml.x86_64 0:5.3.3-50.el6_10
 
Complete!

PHPのインストールの前に、CentOS 6用のremiリポジトリを取得するか確認します。

# ls -l /etc/yum.repos.d/
total 28
-rw-r--r--  1 root root 1981 Jan 11  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  637 Jun 26  2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  626 Jun 26  2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 Jun 26  2012 CentOS-Vault.repo
-rw-r--r--  1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--  1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root  644 Jan 11  2013 remi.repo

remi-phpXX.repoがない場合、下記を実施。

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Preparing...                ########################################### [100%]
   1:remi-release           ########################################### [100%]

これでCentOS 6用のremiリポジトリが追加されました。

# ls -l /etc/yum.repos.d/
total 72
-rw-r--r--  1 root root 1981 Jan 11  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  637 Jun 26  2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  626 Jun 26  2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 Jun 26  2012 CentOS-Vault.repo
-rw-r--r--  1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--  1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi91.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi92.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi93.repo
-rw-r--r--  1 root root  446 Feb 18  2020 remi-glpi94.repo
-rw-r--r--  1 root root  456 Feb 18  2020 remi-php54.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php70.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php71.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php72.repo
-rw-r--r--  1 root root 1314 Feb 18  2020 remi-php73.repo
-rw-r--r--  1 root root  750 Feb 18  2020 remi-safe.repo
-rw-r--r--  1 root root  644 Jan 11  2013 remi.repo
-rw-r--r--  1 root root 2605 Feb 18  2020 remi.repo.rpmnew

"remi-php73.repo"があるので、PHPは7.3までいれられそうです。

次に、PHP7.3のphp-mbstringをインストールします。何回かに分割していますが、以降のパッケージをまとめてインストールできるかもしれません。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-mbstring
 :
Installed:
  php-mbstring.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  oniguruma5php.x86_64 0:6.9.6-1.el6.remi                     php-common.x86_64 0:7.3.25-1.el6.remi                     php-json.x86_64 0:7.3.25-1.el6.remi
 
Complete!

次に、php-mysqlnd、php-pdo、php-gdをインストールします。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php-mysqlnd php-pdo php-gd
 :
Installed:
  php-gd.x86_64 0:7.3.25-1.el6.remi                       php-mysqlnd.x86_64 0:7.3.25-1.el6.remi                       php-pdo.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  gd-last.x86_64 0:2.3.0-2.el6.remi                                                        libwebp.x86_64 0:0.4.3-3.el6
 
Complete!

php-develをインストールします。

# yum install --enablerepo=epel,remi,remi-safe,remi-php73 php-devel
 :
Installed:
  php-devel.x86_64 0:7.3.25-1.el6.remi
 
Dependency Installed:
  keyutils-libs-devel.x86_64 0:1.4-5.el6                 krb5-devel.x86_64 0:1.10.3-65.el6                            libargon2-devel.x86_64 0:20161029-7.el6.remi
  libcom_err-devel.x86_64 0:1.41.12-24.el6               libedit-devel.x86_64 0:2.11-4.20080712cvs.1.el6              libkadm5.x86_64 0:1.10.3-65.el6
  libselinux-devel.x86_64 0:2.0.94-7.el6                 libsepol-devel.x86_64 0:2.0.41-4.el6                         libxml2-devel.x86_64 0:2.7.6-21.el6_8.1
  ncurses-devel.x86_64 0:5.7-4.20090207.el6              openssl-devel.x86_64 0:1.0.1e-58.el6_10                      php-cli.x86_64 0:7.3.25-1.el6.remi
  zlib-devel.x86_64 0:1.2.3-29.el6
 
Complete!

最後にphpをインストールします。

# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php73 php
 :
Installed:
  php.x86_64 0:7.3.25-1.el6.remi
 
Complete!

3.参考サイト

参考サイトは下記です。ありがとうございました。

【Web】さくらVPSのPHPを7.1→7.3にバージョンアップする
さくらVPSのPHPを5.5から7.3にアップデートしました
さくらVPSでPHPをアップデートする
CentOS 6 で "YumRepo Error: All mirror URLs are not using ftp, http[s] or file."

Comments [0] | Trackbacks [0]

Perlの正規表現を使って文字列をまとめて取得する方法

June 2,2021 11:55 PM
Category:[Perl]
Tag:[Perl]
Permalink

Perlの正規表現で文字列をまとめて取得する方法を紹介します。

1.問題点

Perlで次のようなタイムスタンプの変数を設定します。

my $timestamp = '2021-04-11 12:34:56';

このタイムスタンプんの年月日時分秒をそれぞれ別の変数に取得したいのですが方法がわかりません。

ちなみに、特定の文字列であれば、次のような構文で取得できます。

( my $year = $timestamp ) =~ s/^(\d{4})-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}$/$1/;

ということで、Perlの正規表現を使って文字列をまとめて取得する方法を紹介します。

2.対処方法

文字列をまとめて取得するには次のようにパターンマッチ演算子(m//)で記述します。

my ( $year, $month, $day, $hour, $minute, $second )
    = $timestamp
    =~ m!^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$!;

これで、$year, $month, $day, $hour, $minute, $secondの各変数に、年月日時分秒をそれぞれ設定されます。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages