今更知ったのだが、PHPでメールを送信する際に 'ISO-2022-JP' でエンコードするのではなくて、'ISO-2022-JP-MS' でエンコードすると幸せになれるそうだ。
参考サイト:PHPでJIS以外の文字を文字化けせずに日本語メールを送る方法
2017年12月20日水曜日
2017年9月5日火曜日
PHPからGeographicLibを使う
回転楕円体面上(地球表面上)の正多角形を見て、SWIGを使ってPHPからGeographicLibを使おうと企図。
動作環境:エックスサーバ
$ cd tmp
$ wget http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz
$ tar xzf swig-3.0.12.tar.gz
$ cd swig-3.0.12
$ ./configure --prefix=$HOME/local
$ make
$ make install
~/local/binにPATHを通すために、.bashrcに以下を追加
export PATH=/home/user/local/bin:$PATH
export CPLUS_INCLUDE_PATH=/home/user/local/include:$CPLUS_INCLUDE_PATH
$ tar xzf GeographicLib-1.48.tar.gz
$ cd GeographicLib-1.48
$ ./configure --prefix=$HOME/local
$ make
$ make install
動作環境:エックスサーバ
SWIGのインストール
~/tmpにダウンロード・展開して、~/localにインストールする。$ cd tmp
$ wget http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz
$ tar xzf swig-3.0.12.tar.gz
$ cd swig-3.0.12
$ ./configure --prefix=$HOME/local
$ make
$ make install
~/local/binにPATHを通すために、.bashrcに以下を追加
export PATH=/home/user/local/bin:$PATH
export CPLUS_INCLUDE_PATH=/home/user/local/include:$CPLUS_INCLUDE_PATH
※userは、それぞれの環境に合わせて変更
.bashrcを再読込
$ source ~/.bashrc
コマンドの実行を確認
$ swig -version
SWIG Version 3.0.12
(省略)
GeographicLibのインストール
$ wget https://sourceforge.net/projects/geographiclib/files/distrib/GeographicLib-1.48.tar.gz$ tar xzf GeographicLib-1.48.tar.gz
$ cd GeographicLib-1.48
$ ./configure --prefix=$HOME/local
$ make
$ make install
PHPの実行モジュール作成
インターフェースファイル [myproject.i] を準備したら、以下を実行
$ swig -c++ -php myproject.i
$ swig -c++ -php myproject.i
php7の場合:$ swig -c++ -php7 myproject.i
さらに、C++のプログラム [myproject.cpp] を準備して、以下を実行
$ g++ -fpic -c myproject.cpp
$ g++ `/opt/php-7.0.18/bin/php-config --includes` -fpic -c myproject_wrap.cxx
$ g++ -shared *.o -o myproject.so -Wl,-rpath=/home/user/local/lib -L/home/user/local/lib -lGeographic
実行モジュール [myproject.so] ができていることを確認。
php.ini に、実行モジュールの配置場所を設定
extension = /home/user/local/lib/php/7.0.18/extensions/myproject.so
php.ini に、実行モジュールの配置場所を設定
extension = /home/user/local/lib/php/7.0.18/extensions/myproject.so
使用例
require_once "Geodesic.php";
$lat2 = new_doublep();
$lon2 = new_doublep();
$poly=[];
for($i=0; $i<$nVertices; $i++) {
$dir = 90 - $i*360 / $nVertices;
for($i=0; $i<$nVertices; $i++) {
$dir = 90 - $i*360 / $nVertices;
Geodesic::circle($center[0], $center[1], $radius, $dir, $lat2, $lon2);
$poly[] = sprintf("%f %f", doublep_value($lon2), doublep_value($lat2));
}
}
2017年1月24日火曜日
さくらのクラウドを使ってみる(2)
次の日サーバを起動してWebページを確認する。
表示されない…。
firewalld が自動起動している。
systemctl is-enabled firewalld
enabled
firewallを止めてしまうのはまずいので、ポート80 (http) と 443 (https)を開けておく。
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
firewalld が起動しているのを確認して…
systemctl status firewalld
active (running)
Webページが表示されることを確認。
wget https://ja.wordpress.org/latest-ja.tar.gz
-bash: wget: command not found
何から何まで自分でやらなければならない、それが root ってことだ。
yum -y install wget
tar zxf latest-ja.tar.gz
chown -R apache:apache wordpress
WordPressにアクセスしてみる。
「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」
あれ、php-mysql 入れるの忘れてた。しかも php-mysqlnd に変わってる。
yum --enablerepo=remi,remi-php56 install php-mysqlnd
後で必要になるかもしれないので以下もインストール。
php-pear php-xmlrpc php-soap
php-mcrypt を入れようとしてエラー。
Error: Package: php-mcrypt-5.6.30-1.el7.remi.x86_64 (remi-php56)
Requires: libmcrypt.so.4()(64bit)
libmcrypt-devel を入れて…
yum --enablerepo=epel install libmcrypt-devel
再チャレンジ
yum --enablerepo=remi,remi-php56 install php-mcrypt
入った。
MySQL の root ユーザを作成してパスワードを設定
/usr/bin/mysqladmin -u root password 'PASSWORD'
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
…
以下で root の初期パスワードがわかるらしい。
http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
grep 'temporary password' /var/log/mysqld.log
それらしい文字列が釣れたので、さっそく試してみる。
mysql -u root -p
入れた。
すぐパスワードを変更しておけ…か。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPASSWORD';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
ポリシーね…。
https://dev.mysql.com/doc/refman/5.6/ja/validate-password-plugin.html
あれ、mysql_secure_installation を「必ず実行して MySQL インストールをセキュアにしてください。」だそうだ。これでも root のパスワードを設定できるみたいだけど、最初のパスワードはやっぱり必要みたいだな。
データベースとユーザを作って早速WordPressをインストールっと…
ysql> create database wpdb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on wpdb.* to wpuser@localhost identified by 'hogehoge';
Query OK, 0 rows affected, 1 warning (0.01 sec)
※ waning を表示するには、以下を参照。
https://dev.mysql.com/doc/refman/5.6/ja/show-warnings.html
wordpressインストールディレクトリにアクセスして、「さあ、始めましょう!」をクリック。
データベース情報を入力して、「インストール実行」。
WordPressサイト情報を入力して、「WordPressをインストール」をクリック。
無事ログイン画面が表示され、ログインできました。
/etc/httpd/conf.modules.d/00-base.conf 内にて以下の記述を確認
LoadModule rewrite_module modules/mod_rewrite.so
/etc/httpd/conf/httpd.conf 内にて、以下の設定をする。
<Directory /var/www/html>
AllowOverride All
</Directory>
apache再起動
systemctl restart httpd
【参考】
https://devops.profitbricks.com/tutorials/install-and-configure-mod_rewrite-for-apache-on-centos-7/
yum install --enablerepo=remi,remi-php56 phpMyAdmin
Error: Package: php-tidy-5.6.30-1.el7.remi.x86_64 (remi-php56)
Requires: libtidy-0.99.so.0()(64bit)
libtidy-devel を入れて…
yum --enablerepo=epel install libtidy-devel
再チャレンジ
yum install --enablerepo=remi,remi-php56 phpMyAdmin
Complete!
apacheを再起動して、/phpmyadmin/ にアクセス…
Forbidden
You don't have permission to access /phpmyadmin/ on this server.
/etc/httpd/conf.d/phpMyAdmin.conf に
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
...
とあり、リモートからのアクセスは受け付けていない。
とりあえず、開発中だけリモートから受け付けることにする。
Require all granted
apacheを再起動して、/phpmyadmin/ にアクセス…
見慣れたログイン画面が表示された。(「phpMyAdmin へようこそ」なんて書いてあったんだ…)
さすがに root でログインはないだろうということで、ユーザを作っておく。
GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `wp`.* TO 'pma'@localhost IDENTIFIED BY 'PASSWORD';
yum -y install vsftpd
vi /etc/vsftpd/vsftpd.conf
以下を有効にする。
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/var/www/html/
use_localtime=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
firewalld に FTPを許可する。
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
FTPユーザを作成する。
adduser ftpuser
passwd hoge
mkdir /etc/vsftpd/vsftpd_user_conf
vi vsftpd_user_conf/ftpuser
中に以下を記述
local_root=/var/www/html/
chroot_list にユーザ追加
ftpuser
vsftpdを再起動
systemctl restart vsftpd
上位ディレクトリへアクセスできないことを確認
書き込み、削除ができない…パーミッションを変更する。
chown -R apache:apache /var/www/html
usermod -G apache ftpuser
/etc/vsftpd/vsftpd.conf に以下を追加。
allow_writeable_chroot=YES
アップロード及び削除できた。
表示されない…。
firewalld が自動起動している。
systemctl is-enabled firewalld
enabled
firewallを止めてしまうのはまずいので、ポート80 (http) と 443 (https)を開けておく。
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
firewalld が起動しているのを確認して…
systemctl status firewalld
active (running)
Webページが表示されることを確認。
WordPressで動作確認
wget https://ja.wordpress.org/latest-ja.tar.gz
-bash: wget: command not found
何から何まで自分でやらなければならない、それが root ってことだ。
yum -y install wget
tar zxf latest-ja.tar.gz
chown -R apache:apache wordpress
WordPressにアクセスしてみる。
「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」
あれ、php-mysql 入れるの忘れてた。しかも php-mysqlnd に変わってる。
yum --enablerepo=remi,remi-php56 install php-mysqlnd
後で必要になるかもしれないので以下もインストール。
php-pear php-xmlrpc php-soap
php-mcrypt を入れようとしてエラー。
Error: Package: php-mcrypt-5.6.30-1.el7.remi.x86_64 (remi-php56)
Requires: libmcrypt.so.4()(64bit)
libmcrypt-devel を入れて…
yum --enablerepo=epel install libmcrypt-devel
再チャレンジ
yum --enablerepo=remi,remi-php56 install php-mcrypt
入った。
MySQLデータベース作成
MySQL の root ユーザを作成してパスワードを設定
/usr/bin/mysqladmin -u root password 'PASSWORD'
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
…
以下で root の初期パスワードがわかるらしい。
http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html
grep 'temporary password' /var/log/mysqld.log
それらしい文字列が釣れたので、さっそく試してみる。
mysql -u root -p
入れた。
すぐパスワードを変更しておけ…か。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPASSWORD';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
ポリシーね…。
https://dev.mysql.com/doc/refman/5.6/ja/validate-password-plugin.html
あれ、mysql_secure_installation を「必ず実行して MySQL インストールをセキュアにしてください。」だそうだ。これでも root のパスワードを設定できるみたいだけど、最初のパスワードはやっぱり必要みたいだな。
データベースとユーザを作って早速WordPressをインストールっと…
ysql> create database wpdb;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on wpdb.* to wpuser@localhost identified by 'hogehoge';
Query OK, 0 rows affected, 1 warning (0.01 sec)
※ waning を表示するには、以下を参照。
https://dev.mysql.com/doc/refman/5.6/ja/show-warnings.html
wordpressインストールディレクトリにアクセスして、「さあ、始めましょう!」をクリック。
データベース情報を入力して、「インストール実行」。
WordPressサイト情報を入力して、「WordPressをインストール」をクリック。
無事ログイン画面が表示され、ログインできました。
htaccessを許可するための設定
/etc/httpd/conf.modules.d/00-base.conf 内にて以下の記述を確認
LoadModule rewrite_module modules/mod_rewrite.so
/etc/httpd/conf/httpd.conf 内にて、以下の設定をする。
<Directory /var/www/html>
AllowOverride All
</Directory>
apache再起動
systemctl restart httpd
【参考】
https://devops.profitbricks.com/tutorials/install-and-configure-mod_rewrite-for-apache-on-centos-7/
phpMyAdminのインストール
yum install --enablerepo=remi,remi-php56 phpMyAdmin
Error: Package: php-tidy-5.6.30-1.el7.remi.x86_64 (remi-php56)
Requires: libtidy-0.99.so.0()(64bit)
libtidy-devel を入れて…
yum --enablerepo=epel install libtidy-devel
再チャレンジ
yum install --enablerepo=remi,remi-php56 phpMyAdmin
Complete!
apacheを再起動して、/phpmyadmin/ にアクセス…
Forbidden
You don't have permission to access /phpmyadmin/ on this server.
/etc/httpd/conf.d/phpMyAdmin.conf に
<Directory /usr/share/phpMyAdmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
...
とあり、リモートからのアクセスは受け付けていない。
とりあえず、開発中だけリモートから受け付けることにする。
Require all granted
apacheを再起動して、/phpmyadmin/ にアクセス…
見慣れたログイン画面が表示された。(「phpMyAdmin へようこそ」なんて書いてあったんだ…)
さすがに root でログインはないだろうということで、ユーザを作っておく。
GRANT SELECT, INSERT, DELETE, UPDATE, ALTER ON `wp`.* TO 'pma'@localhost IDENTIFIED BY 'PASSWORD';
FTPサーバを立てる
yum -y install vsftpd
vi /etc/vsftpd/vsftpd.conf
以下を有効にする。
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=/var/www/html/
use_localtime=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
firewalld に FTPを許可する。
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
FTPユーザを作成する。
adduser ftpuser
passwd hoge
mkdir /etc/vsftpd/vsftpd_user_conf
vi vsftpd_user_conf/ftpuser
中に以下を記述
local_root=/var/www/html/
chroot_list にユーザ追加
ftpuser
vsftpdを再起動
systemctl restart vsftpd
上位ディレクトリへアクセスできないことを確認
書き込み、削除ができない…パーミッションを変更する。
chown -R apache:apache /var/www/html
usermod -G apache ftpuser
/etc/vsftpd/vsftpd.conf に以下を追加。
allow_writeable_chroot=YES
アップロード及び削除できた。
2017年1月22日日曜日
さくらのクラウドを使ってみる
スタートアップサービスを動かすサーバを立てなければならなくなったが、サーバ負荷の予測が現時点でまったくできない(まあ、もともと正確な負荷見積り技術もないのだが、これから増やしていくからわからないんだと自分を納得させる。)。
“ここは、後でスケールアップが容易と聞いているIAASを選んでおくしかない(汗)…”(心の中のつぶやき。)
といっても、クラウドには完全に乗り遅れているので、藁をもつかむ思いで、タイミングよく開催されていたGunma Webさんの勉強会に飛び込む。会場はMacを開いてカタカタやっている若者で一杯だ。超アウェーだ。いい年したおっさんがひとりで来るところではない。
私もいつもお世話になっている「さくらインターネット」の、企画業務をされているという横田さんがDockerというなにやらコンテナ関連の技術の話をしている。その他にも、勉強会のメンバーがユニークな発表をしている、若さって素晴らしい…(と、歳のせいにしてごまかす)。
とりあえず、いつも「GUNMA GIS GEEK」でネタをもらっている清水さんに挨拶して、救いを求める。先ほどの横田さんを紹介してもらい、初心者を必死でアピールしたところ、「新米サーバ/インフラ担当者のための 仮想サーバ/クラウド技術の常識」という本をもらった(もちろん、さくらインターネットの会員登録から説明してある本だ)。なお、参加者全員に「さくらのクラウド」の20,000円クーポンを配っているので、ここは、まんまと「さくらインターネット」さんの術中にはまって、もう「さくらのクラウド」で行くしかない!と、二次会も参加せずに帰って本を一気に読み終える。
「なんだか簡単そうだ…」
さっそく、クーポンを使って「さくらのクラウド」でサーバを構築する。
コントロールパネルから、ポチっとサーバを作る。(簡単だ…)
yum -y update でOSを最新の状態にする。(順調だ…)
reboot で一応リブートしておくんだ。(念のためだ…)
Apache、MySQL、PHPのインストールも yum を使って簡単に行えます…か。
yum install httpd php mysql-server php-mysql
あれ…なんかエラーが出てる。
一つづつやってみるか…。
yum install httpd
うん、大丈夫そうだから起動!
service httpd start
あれ、Redirect...?
CentOS 7 からは systemctl start httpd だそうだ(…)。
しかし何のメッセージもでないので起動に成功したのかどうかわからない。
systemctl status httpd
active (running)...
Webページが見えるか確認する。
表示されない…。
次に、yum install mysql
Conflict...?
何、CentOS7には mariaDB が入っているから消せだと…。
yum remove mariadb-libs
rm -rf /var/lib/mysql/
MySQLのリポジトリを追加
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
続けてインストール
yum -y install mysql-community-server
何だかエラーが出ている。
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
インストールすればいいみたい。
yum install deltarpm
再度インストール
またエラー。
Downloading packages:
No Presto metadata available for base ...
うーん。
yum clean metadata
再再度インストール
入った…。
mysqld --version でも確認。
次に、yum install php php-mysql
php 5.4が入っちゃったよ…。
yum remove php-*
yum install epel-release
yum install --enablerepo=remi,remi-php56 php php-mysqlnd php-devel php-mbstring php-pdo php-gd
php --version
PHP 5.6.30 (cli) (built: Jan 19 2017 07:57:06)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Webページが見えないので、
systemctl stop firewalld
Apatche 2.4のテストページにようやくご対面。
間髪入れずに、phpの動作確認。
cd /etc
php.iniに date.timezone = "Asia/Tokyo" を追加。
cd /var/www.html に <?php phpinfo() ?>と書いたindex.phpを設置。
Web表示を確認。
<?php phpinfo() ?>
ノー!!
cd /etc/httpd/conf
httpd.conf に以下を追加
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
httpd を再起動してWebページでPHPの動作を確認。
“ここは、後でスケールアップが容易と聞いているIAASを選んでおくしかない(汗)…”(心の中のつぶやき。)
といっても、クラウドには完全に乗り遅れているので、藁をもつかむ思いで、タイミングよく開催されていたGunma Webさんの勉強会に飛び込む。会場はMacを開いてカタカタやっている若者で一杯だ。超アウェーだ。いい年したおっさんがひとりで来るところではない。
私もいつもお世話になっている「さくらインターネット」の、企画業務をされているという横田さんがDockerというなにやらコンテナ関連の技術の話をしている。その他にも、勉強会のメンバーがユニークな発表をしている、若さって素晴らしい…(と、歳のせいにしてごまかす)。
とりあえず、いつも「GUNMA GIS GEEK」でネタをもらっている清水さんに挨拶して、救いを求める。先ほどの横田さんを紹介してもらい、初心者を必死でアピールしたところ、「新米サーバ/インフラ担当者のための 仮想サーバ/クラウド技術の常識」という本をもらった(もちろん、さくらインターネットの会員登録から説明してある本だ)。なお、参加者全員に「さくらのクラウド」の20,000円クーポンを配っているので、ここは、まんまと「さくらインターネット」さんの術中にはまって、もう「さくらのクラウド」で行くしかない!と、二次会も参加せずに帰って本を一気に読み終える。
「なんだか簡単そうだ…」
さっそく、クーポンを使って「さくらのクラウド」でサーバを構築する。
コントロールパネルから、ポチっとサーバを作る。(簡単だ…)
yum -y update でOSを最新の状態にする。(順調だ…)
reboot で一応リブートしておくんだ。(念のためだ…)
Apache、MySQL、PHPのインストールも yum を使って簡単に行えます…か。
yum install httpd php mysql-server php-mysql
あれ…なんかエラーが出てる。
一つづつやってみるか…。
yum install httpd
うん、大丈夫そうだから起動!
service httpd start
あれ、Redirect...?
CentOS 7 からは systemctl start httpd だそうだ(…)。
しかし何のメッセージもでないので起動に成功したのかどうかわからない。
systemctl status httpd
active (running)...
Webページが見えるか確認する。
表示されない…。
次に、yum install mysql
Conflict...?
何、CentOS7には mariaDB が入っているから消せだと…。
yum remove mariadb-libs
rm -rf /var/lib/mysql/
MySQLのリポジトリを追加
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
続けてインストール
yum -y install mysql-community-server
何だかエラーが出ている。
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
インストールすればいいみたい。
yum install deltarpm
再度インストール
またエラー。
Downloading packages:
No Presto metadata available for base ...
うーん。
yum clean metadata
再再度インストール
入った…。
mysqld --version でも確認。
次に、yum install php php-mysql
php 5.4が入っちゃったよ…。
yum remove php-*
yum install epel-release
yum install --enablerepo=remi,remi-php56 php php-mysqlnd php-devel php-mbstring php-pdo php-gd
php --version
PHP 5.6.30 (cli) (built: Jan 19 2017 07:57:06)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Webページが見えないので、
systemctl stop firewalld
Apatche 2.4のテストページにようやくご対面。
間髪入れずに、phpの動作確認。
cd /etc
php.iniに date.timezone = "Asia/Tokyo" を追加。
cd /var/www.html に <?php phpinfo() ?>と書いたindex.phpを設置。
Web表示を確認。
<?php phpinfo() ?>
ノー!!
cd /etc/httpd/conf
httpd.conf に以下を追加
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
httpd を再起動してWebページでPHPの動作を確認。
やっぱり前途多難だ。
登録:
投稿 (Atom)