実践Linux
CentOS7        CentOS7 目次へ  TOP(HOME)へ


PHP7.1のインストール            2019年8月

これまでのPHP5系からPHP7に乗り換えインストールしてみました。

●Remiポジトリの追加
CentOS 7の標準リポジトリではPHP 7.1が提供されていません。 しかし、RedHat系LinuxにPHPの最新版を提供することをミッションとするRemiというプロジェクトのリポジトリを利用すれば、yumで最新のPHPをインストールすることができます。

Remiポジトリの追加
それではさっそくRemiのyumリポジトリを追加してみましょう。ここからは、root権限を持つユーザでコマンドを実行してください。
Remiで提供されているソフトウェアをインストールするためにはEPELのリポジトリも必須要件となっていますので、先にEPELのリポジトリの追加を行った後にRemiのリポジトリを追加します。
EPELのリポジトリ情報はCentOS 7標準のyumリポジトリで提供されていますので、次のyum installコマンドでインストールすることができます。
# yum -y install epel-release (これはログ解析ツール (AWStats)ですでに実行済み)

EPELのリポジトリ情報がインストールできましたので、次にRemiのリポジトリ情報をインストールします。remiのRPMのURLは、Remiのリポジトリの公式サイトで確認することができますが、CentOS 7の場合は次のようにURLを指定してyumコマンドでインストールします。
※サーバーが海外にあるからか、たまにRPMが見つからないなどのエラーが発生しますが、次のインストールコマンドを何回か粘り強く実行したらインストールできます。
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
EPELとRemiのリポジトリが追加できると、/etc/yum.repo.dの配下に、EPEL, Remiの設定が追加されたことがわかります。

●古いバージョンを消去
消すまえに既存のインストール内容を調べておく。
# yum list installed |grep php
 php.x86_64 5.4.16-46.el7 @base
 php-cli.x86_64 5.4.16-46.el7 @base
 php-common.x86_64 5.4.16-46.el7 @base
 php-devel.x86_64 5.4.16-46.el7 @base
 php-gd.x86_64 5.4.16-46.el7 @base
 php-intl.x86_64 5.4.16-46.el7 @base
 php-mbstring.x86_64 5.4.16-46.el7 @base
 php-mcrypt.x86_64 5.4.16-7.el7 @epel
 php-mysql.x86_64 5.4.16-46.el7 @base
 php-pdo.x86_64 5.4.16-46.el7 @base
 php-pear.noarch 1:1.9.4-21.el7 @base
 php-pecl-apcu.x86_64 4.0.11-1.el7 @epel
 php-pecl-apcu-devel.x86_64 4.0.11-1.el7 @epel
 php-process.x86_64 5.4.16-46.el7 @base
 php-xml.x86_64 5.4.16-46.el7 @base

消去
# yum remove php*


●PHP 7.1のインストール
まずはyum searchでPHP 7.1のパッケージを検索して、リポジトリで提供されていることを確認してみます。 パッケージ名にはphp71を指定します。
# yum search php71
(# yum list --enablerepo=remi,remi-php71 | grep php71)
php71.x86_64などの検索結果が表示され、利用できることがわかりました。PHP 7.1関連のパッケージは php71-xxxxxのような名称になっています。
それではPHP 7.1をインストールします。利用するアプリケーションに合わせて、mbstringなどのPHPの拡張をインストールするようにしてください。

# yum -y install php71 php71-php 最小限のインストールだけをしたいとき

# yum install --enablerepo=remi,remi-php71 php php-cli php-common php-devel php-gd php-intl php-mbstring php-mcrypt php-mysql php-pdo php-pear php-pecl-apcu php-pecl-apcu-devel php-process php-xml

PHPバージョンを確認
# php --version
インストールされているライブラリの確認
# php -m

zipとZend OPcacheを追加インストールしたい。
(# yum list installed | grep php 確認)
# yum search php71 確認
# yum install --enablerepo=remi,remi-php71 php-pecl-zip php-opcash インストール


●/etc/php.iniの編集
タイムゾーン設定
date.timezone = "Asia/Tokyo" 902行

文字化け対策
;default_charset = "UTF-8" コメントアウトする 690行
default_charset = "" このように空を明示的に設定しておく(コメントアウトしただけではダメ)
PHP 5.6 からデフォルト値が空から "UTF-8" に変更されています。このためwebを開くと文字化けが起きてしまうようです。(HTTPヘッダーのContent-Typeで指定される文字コードは、php.iniのdefault_charsetというパラメーターで指定することになっているようです。今までは空だったため、特にContent-Typeでcharsetが指定されることもなく、このような問題が発生しなかったとのことです。)

編集したらhttpdの再起動


●httpdサービスの再起動
# systemctl restart httpd


●php7とmysql (mariadb)
php5からphp7に変更すると、mysql(mariadb)操作のプログラムを変更する必要がある。
https://www.php.net/manual/ja/ref.mysql.php参照。それぞれの項目を開くと、新しい記述方法(php7)もわかるようになっている。

mysqli の書き方には大きく2通りある。
手続き型:従来とよく似た mysqli_***() という書き方(インスタンス生成不要)
オブジェクト型:オブジェクト指向的な書き方(インスタンス生成必要)
接続例
 手続き型 mysqli_xxx関数を使う。
   $con = mysqli_connect("Host or IP", "User", "Pass", "DBName");
 オブジェクト型 mysqliクラスをオブジェクト化してから使う。
   $mysqli = new mysqli('Host or IP', 'User', 'Pass', 'DBName');


接続 $mysqli = new mysqli('Host or IP', 'User', 'Pass', 'DBName'); (オブジェクト型)
   $con = mysqli_connect("Host or IP", "User", "Pass", "DBName"); (手続き型)
文字セットを設定 $mysqli->set_charset("utf8"); (オブジェクト型)
         mysqli_set_charset($con, "utf8") (手続き型)
クエリを送信 $result = $mysqli->query($sql); (オブジェクト型)
       $result = mysqli_query($con, $sql); (手続き型)
結果セットの行数 $result->num_rows (オブジェクト型)
         mysqli_num_rows($result) (手続き型)
結果セットのフィールド数 $result->field_count (オブジェクト型)
             mysqli_num_fields($result) (手続き型)
$i番目のフィールド名 $result->fetch_field_direct($i)->name (オブジェクト型)
           mysqli_fetch_field_direct($result, $i)->name (手続き型)
レコード配列を取得 $row = $result->fetch_array(MYSQLI_BOTH) (オブジェクト型)
          MYSQLI_NUM:数値添字配列  MYSQLI_ASSOC:連想配列  MYSQLI_BOTH:連想配列および数値添字配列
          $row = $result->fetch_array() 記入しないときはデフォルトでMYSQLI_BOTH?
          $row = mysqli_fetch_array($result, MYSQLI_BOTH) (手続き型)
          $row = mysqli_fetch_array($result) 記入しないとき
結果保持用メモリを開放する $result->free(); (オブジェクト型)
              mysqli_free_result($result); (手続き型)
接続を閉じる $mysqli->close(); (オブジェクト型)
       mysqli_close($con); (手続き型)


TOP(HOME)へ

目 次
HOME(全体のシステム構成&目次)

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
  EC-CUBEショッピングサイト構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ストリーミングサーバーRed5
ドメインの追加
PHP7.1をインストール

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
audit2allowを使い問題の解決
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
特別企画 Raspberry Piで遊ぶ

印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く


●趣味の世界
相対性理論
量子力学
群論