読者です 読者をやめる 読者になる 読者になる

IMUZA.com

Joomla!によるウェブ制作, PHP, Javascript, CSS

はてなブログ

はてなブログ テーマ制作
・とことこ with Menubar
・Simple Responsive with Menubar
・Mobile-First Responsive
・Hyperspace

Joomla!

Joomla! によるウェブ制作
・テンプレート自作
・モジュール自作
・Joomla!でサイト構築

Web Tips

ウェブサイトづくりに役立つかも
・Javascript
・CSS

Windows, Linux

Windows10
Plamo Linux

【Joomla!】 管理画面の意味不明な「エラー エラーが発生しました」を解消する

Joomla!

前記事で出た Joomla! 管理画面の「エラー エラーが発生しました。」は、

f:id:ausnichts:20160920165807p:plain


以前に経験したこれですね。

www.imuza.com

MySQL(mariaDB)の設定ファイル/etc/my.cnf(Plamo の場合)のsort_buffer_sizeの値を大きくすれば解消します。

ついでに、他の値も変更してみました。

sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M

で、再起動です。

# /etc/rc.d/init.d/mariadb restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!

【Plamo6.1】phpMyAdmin を入れたら、mysqli 拡張がありません

Windows, Linux



mysqli 拡張がありません

MySQL を使うなら、phpMyAdmin は必須ということで、Joomla! の前に、phpMyAdmin 4.6.4 を入れてみましたら、「mysqli 拡張がありません」と怒られてしまいました。

f:id:ausnichts:20160920132249p:plain


phpMyAdmin は、PDO では動かないんですね。再度、--with-mysqli オプションを付けて php をコンパイルです。

立ち上がりました。

f:id:ausnichts:20160920134259p:plain


MySQL の root でログインしますと、下段にこんなメッセージが出ています。

f:id:ausnichts:20160920134607p:plain


設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました

これは、config.sample.inc.phpconfig.inc.php に変更して、$cfg['blowfish_secret']に32文字以上の適当な文字列を設定すればOKです。

# cp config.sample.inc.php config.inc.php
# vi config.inc.php
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * phpMyAdmin sample configuration, you can use it as base for
 * manual configuration. For easier setup you can use setup/
 *
 * All directives are explained in documentation in the doc/ folder
 * or at <https://docs.phpmyadmin.net/>.
 *
 * @package PhpMyAdmin
 */

/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
$cfg['blowfish_secret'] = '12345678901234567890123456789012'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

(略)


phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています

これについては、下記サイトに解決方法を書いています。

ただし、create_tables.sqlのあるディレクトリがexamplesからsqlに変わっています。もちろん、ユーザ pma のパスワードは一致させないといけません。

ausnichts.hatenablog.com

これで警告やインフォメーションが消えました。


Joomla! を入れてみたら管理画面にエラー表示

Joomla! のインストールはこちらに書いています。

www.imuza.com

で、無事インストールもでき、管理画面に入ってみましたら「エラー」表示が出ています。

f:id:ausnichts:20160920165807p:plain


これじゃ何がエラーなのか分かりませんね。フロントは問題なく表示されます。

調べるしかありませんが次回です。

【Plamo6.1】PHPをソースから再インストール

Windows, Linux

前回の続きです。

とりあえずは、これで Apache + PHP + MySQL、いわゆる LAMPサーバが立ち上がったのですが、Joomla! が PDO_MySQL で動くかのテストのために、一度 Joomla! をインストールしてみましたら、別の問題が発生しました。

それがこちら、Mcrypt Supportが「いいえ」になっています。

f:id:ausnichts:20160914165525p:plain


これは、Plamo5.2 で phpMyAdmin のインストール時に経験していますので楽勝と思って始めましたところ、いくつか引っかかり、ちょっとばかり苦労しました。

ausnichts.hatenablog.com

以下、その経緯です。


libmcrypt のインストール

/usr/local/src/とかに移動して、

# wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
# tar -zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8
# ./configure --prefix=/usr  --disable-posix-threads --enable-dynamic-loading
# make
# make install

これで、/usr/lib/以下に libmcrypt がインストールされます。

全てを管理者で実行していますが、makeまではユーザ領域でやりsudoでインストールした方がいいかもしません。それぞれの判断で。


PHP をソースから再インストール

同じく、/usr/local/src/とかで、phpinfo で取り出した configureオプションに--with-mcrypt=/usr/libを追加してコンパイルします。

# wget http://jp2.php.net/distributions/php-5.6.25.tar.gz
# tar -zxvf php-5.6.25.tar.gz
# cd php-5.6.25
# ./configure \
 --prefix=/usr \
 --libdir=/usr/lib64 \
 --sysconfdir=/etc \
 --localstatedir=/var \
 --mandir=${prefix}/share/man \
 --with-apxs2=/usr/bin/apxs \
 --with-zlib \
 --with-curl \
 --with-gd \
 --enable-gd-jis-conv \
 --with-freetype-dir=/usr \
 --with-jpeg-dir=/usr \
 --enable-mbstring \
 --enable-pdo \
 --with-pdo-mysql=shared,/opt/mysql \
 --with-pdo-sqlite \
 --with-config-file-path=/etc/httpd/ \
 --enable-zip=shared \
 --with-libzip \
 --enable-ftp=shared \
 --with-bz2=shared \
 --with-db4=shared,/usr \
 --with-gdbm=shared \
 --enable-exif=shared \
 --with-ldap=shared \
 --with-libdir=lib64 \
 --with-mcrypt=/usr/lib

(略)

configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no


止まってしまいました。ググりましたら、そのものズバリのサイト『PHPをソースからインストールするときにopcacheを有効にできない』がヒットしましたので参考にさせていただき、

# find / -name "*opcache*"
/usr/lib64/extensions/no-debug-non-zts-20131226/opcache.so

# vi /etc/ld.so.conf

(で /usr/lib64 を追加)

# ldconfig

(再度)

# .configure \
 --prefix=/usr \

(略)

config.status: main/php_config.h is unchanged
config.status: executing default commands
#

(とコンフィグが通りましたので)

# make

(略)

Build complete.
Don't forget to run 'make test'.
# make test

(略)

You may have found a problem in PHP.
This report can be automatically sent to the PHP QA team at
http://qa.php.net/reports and http://news.php.net/php.qa.reports
This gives us a better understanding of PHP's behavior.
If you don't want to send the report immediately you can choose
option "s" to save it.  You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]: s
Please send /usr/local/src/php-5.6.25/php_test_results_20160915_1634.txt to qa-reports@lists.php.net manually, thank you.
#


と失敗してしまいました。

ただ、いろいろ読みますと、PHP の make testがエラーなく通ることはほとんどないそうで、保存したphp_test_results_20160915_1634.txtを見てみてもエラーの原因をつかめませんでしたので、一度インストールしてみることにしました。

下のremovepkg phpはインストールされている PHP を削除しています。

# removepkg php
# make install

(略)

# apachectl restart
[Thu Sep 15 16:53:21.467227 2016] [so:warn] [pid 20977] AH01574: module php5_module is already loaded, skipping


インストーラが/etc/httpd/httpd.confphp5_moduleを追加したようですので削除して、再度 Apache をリスタートして、phpinfo を見てみます。

f:id:ausnichts:20160915165803p:plain


無事、Mcrypt が組み込まれているようです。が、dir が指定されていませんので、php.iniに指定しなくてはいけないのでしょう。

(2016/9/16)マニュアルによりますと、コンパイルの時に指定したディレクトリがデフォルトになっているようですのでこのままで問題ないかもしれません。問題が出たら設定しましょう。

時間がなくなりましたので次回です。

【Plamo6.1】MySQL(MariaDB)を立ち上げ、Apache+PHP+MySQL の環境を整える

Windows, Linux

前回で、Webサーバと PHP が使える状態になりました。後は、MySQL です。



MySQL はインストールされているのか?

Plamo のパッケージ管理は、installpkgremovepkgを使って行い、インストールされたパッケージは、/var/log/package以下に

PACKAGE NAME:     mariadb-10.1.10-x86_64-P1
COMPRESSED PACKAGE SIZE:     30049 K
UNCOMPRESSED PACKAGE SIZE:     237300 K
PACKAGE LOCATION: /var/adm/mount/plamo/05_ext/mariadb-10.1.10-x86_64-P1.txz
PACKAGE DESCRIPTION:
mariadb: MariaDBデータベースサーバ
mariadb:
mariadb: MariaDBは,Oracleに買収されたMySQLを見限った元々の開発者たちが
mariadb: 新しく作りあげた,MySQLと互換性を持ったデータベースサーバです.
mariadb:
mariadb:
mariadb:
mariadb:
mariadb:
mariadb:
mariadb:
FILE LIST:
opt/
opt/mariadb/
opt/mariadb/README
opt/mariadb/CREDITS
opt/mariadb/COPYING
opt/mariadb/COPYING.LESSER

のようにインストールデータが保存されています。

上のファイルは、MySQL 互換の MariaDB のパッケージです。確かに、/opt/mariadb/以下にインストールされています。

# ls -l /opt/
合計 8,192
drwxr-xr-x  5 root root  4,096 12月  8日 2014年 kde/
drwxr-xr-x 10 root mysql 4,096  2月  5日 2016年 mariadb/
lrwxrwxrwx  1 root root      7  8月  2日  13:18 mysql -> mariadb/

MySQL は、MariaDB のシンボリックリンクになっています。なるほど。


MariaDB の起動スクリプト

Plamo の起動スクリプトは、/etc/rc.d/以下に収められており、/etc/rc.d/rc.Mから/etc/rc.d/init.d/以下にある実行ファイルが実行されます。

MariaDB の起動スクリプトもその中にあります。ただ、実行ファイルになっていませんので実行権限を与えます。

# ls -l /etc/rc.d/init.d/mariadb
-rw-r--r-- 1 root root 12,564  2月  5日 2016年 /etc/rc.d/init.d/mariadb

# chmod u+x /etc/rc.d/init.d/mariadb
# ls -l /etc/rc.d/init.d/mariadb
-rwxr--r-- 1 root root 12,564  2月  5日 2016年 /etc/rc.d/init.d/mariadb*

起動してみましょう。

# /etc/rc.d/init.d/mariadb start
Starting MySQL. SUCCESS!

# mysqlshow
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

立ち上がりました!


MySQL(MariaDB)の初期設定

root でログインしてみます。初期状態ではパスワードは設定されていませんのでエンターで入ります。

# mysql -u root -p mysql
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.1.10-MariaDB Source distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [mysql]> select host,user,password from user;
+-----------+------+----------+
| host      | user | password |
+-----------+------+----------+
| localhost | root |          |
| vaio      | root |          |
| 127.0.0.1 | root |          |
| ::1       | root |          |
| localhost |      |          |
| vaio      |      |          |
+-----------+------+----------+
6 rows in set (0.00 sec)

上が登録ユーザの一覧ですが、匿名ユーザを削除しておきます。

MariaDB [mysql]> delete from user where user='';
Query OK, 2 rows affected (0.00 sec)

MariaDB [mysql]> select host,user,password from user;
+-----------+------+----------+
| host      | user | password |
+-----------+------+----------+
| localhost | root |          |
| vaio      | root |          |
| 127.0.0.1 | root |          |
| ::1       | root |          |
+-----------+------+----------+
4 rows in set (0.00 sec)

root にパスワードを設定します。

MariaDB [mysql]> set password for root@localhost=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> set password for root@vaio=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> set password for root@127.0.0.1=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> set password for root@'::1'=password('パスワード');
Query OK, 0 rows affected (0.00 sec)


MySQL(MariaDB)接続確認

この MariaDB を PHP からどうやって使えばいいのでしょう? まずは、バージョンをみてみますと、

# mysql -V
mysql  Ver 15.1 Distrib 10.1.10-MariaDB, for Linux (x86_64) using readline 5.1

と 10.1 となっており、5系列は MySQL と完全互換のようですが、10系列はどうなんでしょう?

その場合、PHP からの接続に何を使うかということになりますが、MySQL 拡張モジュールが非推奨ということですし、そもそも入っていないわけですから、PDO_MySQL を使うことになります。PDO_MySQL を使って接続確認をしてみましょう。

PHP のマニュアルからの接続テストスクリプトで確認してみます。

<?php
$user = 'root';
$pass = 'パスワード';

try {
  // データベースに接続
  $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
  // 接続に成功
  print "接続成功!";
  $dbh = null;
} catch (PDOException $e) {
  print "エラー!: " . $e->getMessage() . "<br/>";
  die();
}
?>


(2016/9/12)追加

「エラー!: could not find driver」と表示されます。

pdo_mysql.soが組み込まれていないですね。

# find / -name "pdo_mysql.so"
/usr/lib64/extensions/no-debug-non-zts-20131226/pdo_mysql.so

にありますので、php.iniに以下を追加します。

; UNIX: "/path1:/path2"
include_path = ".:/usr/lib64/php:/usr/lib64/extensions/no-debug-non-zts-20131226
"
extension=pdo_mysql.so

Apache を再起動して、接続テストスクリプトを呼び出しますと、「接続成功!」と表示されますので OK です。


さて、これで Apache + PHP + MySQL の準備が整いましたが、問題は、一番の目的の Joomla! が PDO_MySQL で動くかです。一度インストールしてみるしかありませんね。

次回です。

【Plamo6.1】Webサーバ Apache + PHP を立ち上げる

Windows, Linux

Plamo5.2 で Apache + PHP を立ち上げた際の記事はこちらです。

ausnichts.hatenablog.com



Apache, PHP のバージョンチェック

5.2 の時は結構苦労しましたので、今回も構えて始めたのですが、以外にも簡単に立ち上がりました。

まずはバージョンチェックから。

# httpd -v
Server version: Apache/2.4.18 (Unix)
Server built:   Dec 15 2015 17:58:46

# php -v
PHP 5.6.17 (cli) (built: Jan  8 2016 19:51:54)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

Windows からサーバアドレスを打ってみますと、

It works!

と表示されますので Apache は立ち上がっています。


PHP を組み込む

/srv/httpd/htdocs

<?php
phpinfo();
?>

phpinfo.phpを作り、http://アドレス/phpinfo.phpと打ってみますと、そのままテキスト表示されますのでphpが読み込まれていないようです。

/etc/httpd/httpd.conf

# php5 conf
Include /etc/httpd/extra/php5.conf

を追加して、Apache を再起動します。再度、http://アドレス/phpinfo.phpと打ちます。

f:id:ausnichts:20160907131143p:plain


無事読み込まれました。MPM は何で動いているのでしょう?

# apachectl -V | grep 'Server MPM'
Server MPM:     prefork

今回はこのまま行こうと思いますが、MPM の prefork と worker の違いについては 5.2 の時の記事をご覧ください。

Plamo-5.2/apache+phpをCGIで動かす(完了なのだが…) - @半径とことこ60分


PHP のタイムゾーン

エラーログを見てみましたら、

PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /srv/httpd/htdocs/phpinfo.php on line 2

と Warning がありましたので、

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"

/etc/httpd/php.iniのタイムゾーンを設定しておいたほうがいいようです。


mysql

5.2 の時のこちらの記事「 Plamo-5.2/phpをソースからインストールし直す(完了) - @半径とことこ60分 」で、--with-pdo-mysqlって何だ?って書いていますが、わざわざあらためてmysqlを組み込む必要はなく、むしろ、

mysqli か PDO_MySQL のどちらかを使うことをおすすめします。 古い mysql 拡張モジュールを新規開発で使うのはおすすめしません。 というのも、これは PHP 5.5.0 で非推奨となり、PHP 7 で削除されたからです。

ということじゃないですか!? 前回は何を調べたんでしょうね?(笑)

ということで、mysql のテストは次回です。