サーバをIDCFクラウドからGCPに移転しているのですが、サーバ証明書も引越させないといけません。サーバ証明書としてLet’s Encryptを利用しているのですが、再発行させてかっこよく移行しようとしたのですが、うまくいかないのでこちら↓のサイトを参考に、一旦今ある発行済の証明書をそのまま持ってくることにしました。
サーバー移転(引越し)でLet’s Encrypt 「SSL/TLSサーバ証明書」はどうする?
上記サイト内ではzipで固めて持ってきていますが、tarの方がそのままでシンボリックリンクも持ってこれるのでおすすめです。(zipもオプションを付ければ良いだけですが...)
具体的には以下の手順ですね。
引越元サーバで圧縮
cd /etc
tar zcvf letsencrypt.tar.gz letsencrypt
引越先サーバで解凍
cd /etc
tar xvf letsencrypt.tar.gz
2018年12月27日木曜日
2018年12月26日水曜日
Suama Online ServiceはIDCFクラウドからGCPへ移行!
IDCFクラウド個人向けサービス終了に伴い移行先をどこにするか検討していましたが、色々と検討した結果Google Cloud Platform (GCP) に移行することにしました。
移行先としてGCPを選択した理由は以下のとおりです。。
移行先としてGCPを選択した理由は以下のとおりです。。
- f1-microインスタンスであればサーバ1台を期限なしで無償利用できる(米国リージョンのみ)
- GCPの中で今利用しているSendGridを利用することができる
- GCP自体、以前お試しで利用したことがあるので使用感が分かっている。
上記理由のうち、1つ目についてはサーバ自体は無償枠で利用できますが、通信量の課金が発生するという可能性があり、少し悩みました。ただ、Suama Online Serviceは今の所テキストサイトなので、下りの通信はそれほど発生しないだろう、ということで今回はGCPに決定です!
以前環境を作ってはいたものの、今回は一から再構築を行いました。
概ねこちらで紹介されている手順ですね。
ただ、自分の作り方が悪かったのか、ファイアウォールが初期でほぼ当たっていない(つまり、丸裸で公開されている)状態になってしまいました。仕方がないのでファイアウォールは個別にルールを色々と設定しています。
後はやはり通信量で課金が大きくなることが怖いので、予算アラートも設定しています。
こちらで紹介されている手順ですね。
今回は折角GCPに移行したので、ランニングコストを限界まで下げることにも挑戦したいと思います。
2018年12月16日日曜日
IDCFクラウド個人向けサービス終了
12月12日、メールでIDCフロンティアより個人向けIDCFクラウドの終了に関するお知らせが来ていました。
IDCFクラウドはかなり以前から利用していて、Suama Online Serviceの基盤にも利用させて頂いています。ワンコインでサーバが立てられる、しかもスペックもそれなりに良いし安定しているということで重宝していましたが、この見せ玉のワンコインサーバばかり利用する個人ユーザは採算が合わないと判断したのでしょう。残念ではありますが、仕方ないですね。
1点不満に思うのはサービス終了の連絡がサービス終了の3ヶ月少し前に来たということで、移行作業などに取れる時間が3ヶ月しかない点です。まあ個人向けだから影響が少ないという判断なのでしょうが、やはり1年前、せめて半年前には通知、もしくは先に新規契約終了などを行い、サービス終了を匂わせておいて欲しかったです。
何にせよ、自分は移行先を考えねばなりません。やはりサービス継続性を考えるとメジャークラウドに行かざる得ないのか、と思いますが、本当に選択肢がそれだけになっていきそうで少し悲しい気もします。
この度弊社は、2019年3月31日(以下「廃止日」)をもって個人向けIDCFクラウドサービスの提供を終了させていただくことになりました。現在個人名義で対象サービスをご利用いただいているお客様は、廃止日以降ご利用いただく事ができなくなります。ビジネス会員になれば引き続き利用できるよ、ということですね。自分はビジネス会員になる資格がなさそうなので、出ていかなければなりません。。。
今後、IDCFクラウドサービスは、法人及び個人事業主のお客様を対象とする「ビジネス会員」としてご利用いただけます。お客様がIDCFクラウドサービスのご利用を希望される場合は、下記の「ビジネス会員」の資格および同意手順をご確認ください。
今後もお客様への一層のサービス向上に取り組んで参りますので、何卒ご理解のほどお願い申し上げます。
【対象サービス】
個人向けIDCFクラウドサービス(付帯関連する全サービスを含む)
【廃止日】
2019年3月31日
【約款の変更】
上記、個人向け対象サービスの終了に伴い、対象サービスに係る「クラウドサービスに関する契約約款」を変更しております。下記URLよりご確認ください。
https://www.idcf.jp/pdf/common/cloudservices.pdf
【ビジネス会員の資格】今回の個人向けサービス終了は利用者には個別でメールが来ていますが、特にプレスなどは出ておらず、約款の変更だけみたいですね。
法人(国、地方公共団体、日本国法又は外国法の法定に基づいて設立された会社その他の社団・財団・組合をいう)及び個人事業主(個人事業主、自営業者、個人事業者等、個人で事業を営んでいる人であって、かつ税務署へ開業届を提出している者をいう)。
IDCFクラウドはかなり以前から利用していて、Suama Online Serviceの基盤にも利用させて頂いています。ワンコインでサーバが立てられる、しかもスペックもそれなりに良いし安定しているということで重宝していましたが、この見せ玉のワンコインサーバばかり利用する個人ユーザは採算が合わないと判断したのでしょう。残念ではありますが、仕方ないですね。
1点不満に思うのはサービス終了の連絡がサービス終了の3ヶ月少し前に来たということで、移行作業などに取れる時間が3ヶ月しかない点です。まあ個人向けだから影響が少ないという判断なのでしょうが、やはり1年前、せめて半年前には通知、もしくは先に新規契約終了などを行い、サービス終了を匂わせておいて欲しかったです。
何にせよ、自分は移行先を考えねばなりません。やはりサービス継続性を考えるとメジャークラウドに行かざる得ないのか、と思いますが、本当に選択肢がそれだけになっていきそうで少し悲しい気もします。
2018年12月2日日曜日
作成したWebAPIの仕様を公開しました
これまで作成したWebAPIの仕様を整理し、公開しました。
Suama Online Service WebAPI
これまで作成したWebAPIは以下の3つです。
Suama Online Service WebAPI
これまで作成したWebAPIは以下の3つです。
- 接続元グローバルIPアドレスを返すAPI(グローバルIP単体)
- 接続元グローバルIPアドレスを返すAPI(json形式)
- グローバルIPアドレスの国を確認して返すAPI
アクセスすると、接続元IP(グローバルIP)を返します。それだけ。
アクセスすると、接続元IP(グローバルIP)を返します。ただし、こちらはjson形式で返します。IPアドレスのほか、ホスト名も逆引きして返してくれます。
グローバルIPアドレスをGETで渡すと、そのIPが割り振られている国情報をjson形式で返してくれます。
WebAPIについてはこれからも、ラインナップを増やしていきたいと思います!
2018年11月24日土曜日
グローバルIPアドレスの国を確認して返すWebAPI
先日、グローバルIPの国を確認するサイトを作成しました。
グローバルIPアドレスの国を確認するサイトを作りました!
今回はこれを少しカスタマイズして、WebAPI版を作成してみました。
アクセスポイントは以下のアドレスになります。
https://api.suama.onl/v1/ip-country.php
で、ipaddrをGETで渡す必要があります。
例えば、正しいグローバルIPを入れた場合は以下のようになります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=1.1.1.1 |jq
【実行結果】
{
"message": "OK:The search target IP address is a global IP address, registration information existed!",
"code": "200",
"result": {
"ip": "1.1.1.1",
"hostname": "one.one.one.one",
"countrycode": "AU",
"countryname_ja": "オーストラリア",
"countryname_en": "Australia",
"RIR": "apnic",
"status": "assigned",
"date": "2011/08/11"
}
}
正常に国を取得できないIPアドレスを指定した場合、以下のような結果になります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=192.168.1.1 |jq
【実行結果】
{
"message": "NG:Search target IP address is private IP address!",
"code": "400",
"result": {
"ip": "192.168.1.1"
}
}
入力がなかったり、IPアドレス以外の入力の場合、以下のようになります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php
【実行結果】
{
"message": "NG:No input!",
"code": "400"
}
そろそろAPIについて纏めたページを作らないとダメですね。。。
グローバルIPアドレスの国を確認するサイトを作りました!
今回はこれを少しカスタマイズして、WebAPI版を作成してみました。
アクセスポイントは以下のアドレスになります。
https://api.suama.onl/v1/ip-country.php
で、ipaddrをGETで渡す必要があります。
例えば、正しいグローバルIPを入れた場合は以下のようになります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=1.1.1.1 |jq
【実行結果】
{
"message": "OK:The search target IP address is a global IP address, registration information existed!",
"code": "200",
"result": {
"ip": "1.1.1.1",
"hostname": "one.one.one.one",
"countrycode": "AU",
"countryname_ja": "オーストラリア",
"countryname_en": "Australia",
"RIR": "apnic",
"status": "assigned",
"date": "2011/08/11"
}
}
正常に国を取得できないIPアドレスを指定した場合、以下のような結果になります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php?ipaddr=192.168.1.1 |jq
【実行結果】
{
"message": "NG:Search target IP address is private IP address!",
"code": "400",
"result": {
"ip": "192.168.1.1"
}
}
入力がなかったり、IPアドレス以外の入力の場合、以下のようになります。
【実行例】
curl https://api.suama.onl/v1/ip-country.php
【実行結果】
{
"message": "NG:No input!",
"code": "400"
}
そろそろAPIについて纏めたページを作らないとダメですね。。。
2018年11月13日火曜日
自分のグローバルIPアドレス(接続元IP)を返すWebAPI
最近APIで色々処理できるものが増えてきたのですが、プログラムの実行環境も色々なパターンがあるので、自分のグローバルIPを確認できるAPIがあると便利ではないか、と思いました。でもまあ、こういうちょっと便利なものって、大抵誰かが作っているんですよね。調べてみると、やはりありました。
こちらの記事に纏まっています。
グローバルIPをcurlで確認
以下、抜粋です。
グローバルIPをcurlで確認
・httpbin.org/ip
$ curl httpbin.org/ip
{
"origin": "121.102.14.91"
}
・inet-ip.info
$ curl inet-ip.info
121.102.14.91
・ifconfig.meでも折角なので、2つほど作ってみました。
$ curl ifconfig.me
121.102.14.91
IPアドレスを単純に返すだけのもの
$ curl https://api.suama.onl/v1/ip.php
1.1.1.1
json形式でIPアドレスとホスト名を返すもの
$ curl https://api.suama.onl/v1/ip-hostname.php |jq
{
"ip": "1.1.1.1",
"hostname": " one.one.one.one"
}
ご自由にご利用ください!
2018年10月30日火曜日
IPアドレス国確認のエンハンス
先日公開したIPアドレス国確認ですが、早速機能追加を行いました。
追加機能は以下のとおりです。
・検索結果に指定したIPアドレスのホスト名を表示
まあ大した機能ではないですが、別で確認するのも面倒なので纏めて表示したほうが便利かなと思って追加しました。
追加機能は以下のとおりです。
・検索結果に指定したIPアドレスのホスト名を表示
まあ大した機能ではないですが、別で確認するのも面倒なので纏めて表示したほうが便利かなと思って追加しました。
2018年10月26日金曜日
グローバルIPアドレスの国を確認するサイトを作りました!
2018年10月25日木曜日
特殊な用途のIPアドレス
IPv4は0.0.0.0~255.255.255.255の範囲までで表現されますが、この中で利用用途が特定されているIPアドレスが幾つかあります。
有名なものはプライベートIPアドレス、または先日紹介したシェアードIPアドレスなんてものもありますが、それ以外にも幾つか指定されています。
例えば169.254.0.0/16はリンクローカルアドレスと呼ばれていて、分かりやすいのはNICの設定がDHCPになっているのに、DHCPサーバからIPアドレスが取れないときに割り当てあられるアドレスですね。APIPA(Automatic Private IP Addressing)と呼ばれるやつです。
これら以外にも色々あって、RFC3330で定められています。また、最近のIPv4不足もあり、定められていた(もしくは予約されていた)ものの、グローバルIPに割り当てられる事になったIPアドレスもあります。
参考になりそうなサイト
特別なIPアドレスって知っていますか?
有名なものはプライベートIPアドレス、または先日紹介したシェアードIPアドレスなんてものもありますが、それ以外にも幾つか指定されています。
例えば169.254.0.0/16はリンクローカルアドレスと呼ばれていて、分かりやすいのはNICの設定がDHCPになっているのに、DHCPサーバからIPアドレスが取れないときに割り当てあられるアドレスですね。APIPA(Automatic Private IP Addressing)と呼ばれるやつです。
これら以外にも色々あって、RFC3330で定められています。また、最近のIPv4不足もあり、定められていた(もしくは予約されていた)ものの、グローバルIPに割り当てられる事になったIPアドレスもあります。
参考になりそうなサイト
特別なIPアドレスって知っていますか?
2018年10月24日水曜日
PHPで文字列を比較するときに==を利用するとうまくいかない
if文で文字列比較をしたのですが、ハマりました。
PHPだと==は予期せぬ動作をしそうなので、strcmp関数を利用したほうが良いようです。
一致で比較する場合は、以下のような使い方になります。
strcmp(比較する値1,比較する値2)==0
こちらのサイトを参考にさせて頂きました。
PHPで文字列を比較する方法と、型によりハマるポイント
PHPだと==は予期せぬ動作をしそうなので、strcmp関数を利用したほうが良いようです。
一致で比較する場合は、以下のような使い方になります。
strcmp(比較する値1,比較する値2)==0
こちらのサイトを参考にさせて頂きました。
PHPで文字列を比較する方法と、型によりハマるポイント
2018年10月23日火曜日
yyyymmddをyyyy/mm/ddにする
日付としてデータをもたせて、出力フォーマットを指定して、とか考えましたが、面倒なので今回は文字列操作で対応しました。
こんな感じです。
substr_replace(substr_replace('20181010','/',6,0),'/',4,0)
//結果
2018/10/10
こちらのサイトを参考にさせて頂きました。
PHPで文字列の指定した位置に文字列を挿入する方法
こんな感じです。
substr_replace(substr_replace('20181010','/',6,0),'/',4,0)
//結果
2018/10/10
こちらのサイトを参考にさせて頂きました。
PHPで文字列の指定した位置に文字列を挿入する方法
2018年10月22日月曜日
数字をカンマ区切りにする
PHPには数字をカンマ区切りにするという関数が存在するようです。
こんな感じで利用できるそうです。
<?php
$num = 100000000;
$num = number_format($num);
print $num . "円";
?>
こんな感じで利用できるそうです。
<?php
$num = 100000000;
$num = number_format($num);
print $num . "円";
?>
こちらのサイトを参考にさせて頂きました。
2018年10月21日日曜日
Postfix+Sendgridの組合せでメール配信環境を構築する
先日Gmailを利用してメールを配信できる環境を構築しました。
Postfix+Gmailの組合せでメール配信環境を構築する
この度、申請していたSendGrid利用の申請が承認されたので、SendGridを利用するように設定を変更してみます。
設定の仕方ですが、以下のサイトにまとまっています。
Postfix SendGrid
設定内容はGmailを利用する場合とほとんど同じですね。
で、早速メールを飛ばしてみました。
が、届かない!
確認したところ、メールを飛ばす処理でFromにGmailのアカウントを入れていたのが良くないようです。SendGridの申請時に指定したドメインのメールアドレスでないと届かないのですね。スパム利用対策として、正しい動作だと思います。
設定を変更して再度送付したところ、届きました!
ただ、本文の改行がなくなっています。
調べると以下の記載がありました。
よくある質問 ? メール改行トラブル編
それでも直らない!
SMTPでメールを送信する際に気をつけることはありますか?
というページでも改行のことに触れていますが、原因が不明。Gmailのときは普通に改行していたのに。。。
まあ、当面人にメールを送る運用は考えていないので、対応は保留にします。
原因が分かったら追記したいと思います。
Postfix+Gmailの組合せでメール配信環境を構築する
この度、申請していたSendGrid利用の申請が承認されたので、SendGridを利用するように設定を変更してみます。
設定の仕方ですが、以下のサイトにまとまっています。
Postfix SendGrid
設定内容はGmailを利用する場合とほとんど同じですね。
で、早速メールを飛ばしてみました。
が、届かない!
確認したところ、メールを飛ばす処理でFromにGmailのアカウントを入れていたのが良くないようです。SendGridの申請時に指定したドメインのメールアドレスでないと届かないのですね。スパム利用対策として、正しい動作だと思います。
設定を変更して再度送付したところ、届きました!
ただ、本文の改行がなくなっています。
調べると以下の記載がありました。
よくある質問 ? メール改行トラブル編
考えられる原因早速、対策で書いてあるHTML変換機能の無効化を実施しました。
テキストメールのHTML変換機能(以下、HTML変換機能)が有効になっていることが原因として考えられます。この機能は、元のテキストメール(Content-typeがtext/plain)の本文をHTML変換してマルチパートメール(Content-typeがmultipart/alternative)の1パートとして追加します。その際、改行コードはHTMLの改行タグに変換されません。このため、メールクライアントでtext/htmlパートを確認すると、変換されたメールの改行が削除されているように見えます。
それでも直らない!
SMTPでメールを送信する際に気をつけることはありますか?
というページでも改行のことに触れていますが、原因が不明。Gmailのときは普通に改行していたのに。。。
まあ、当面人にメールを送る運用は考えていないので、対応は保留にします。
原因が分かったら追記したいと思います。
2018年10月20日土曜日
グローバルIPアドレスを誰が管理しているのか?
グローバルIPアドレスはインターネットの世界で正常に通信を行うため、一意(重複するものがない状態)である必要があります。そのため、グローバルIPアドレスはしっかりと管理されており、その管理組織は階層構造となっています。
まず、頂点にいるのが、以下の組織です。
ICANN(Internet Corporation for Assigned Names and Numbers、アイキャン)
ICANNはIPアドレスの管理のほか、ドメインの管理、ルートネームサーバの運用などインターネットが正常に機能するための基本機能の運用を行っています。
その次に、各地域ごとに管理組織があります。
APNIC(アジア・オセアニア)
ARIN(北米)
RIPE NCC(欧州・中東)
LACNIC(中南米)
AFRINIC(アフリカ)
更にその次の階層として、国ごとの管理組織があります。
日本だとJPNICですね。
つまり、日本で利用されているグローバルIPアドレスは、以下の流れで払い出されているわけです。
ICANN→APNIC→JPNIC
更にJPNICからキャリアなどのIPアドレス管理指定事業者にアドレスが割り当てられ、そこから利用者に分配されます。
つまり、こうなります。
ICANN→APNIC→JPNIC→Pアドレス管理指定事業者→利用者
なお、各管理組織に割り当てられているIPアドレス情報は公開されており、FTPでリストをダンロードすることも可能です。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
このリストですが、アドレス帯がCIDRではなく、開始IPアドレスとそこから幾つ割り当てているか、という書きっぷりなんですよね。ちょっと見にくいです。
フォーマットは以下のサイトに解説があります。
RIR statistics exchange format
こういった管理組織ですが、国連や政府機関がやっているの?と思いきや、ICANNを含めて民間団体なんですよね。公的な動きをする団体ではあるものの、改めてインターネットは民間のものであると感じますね。
まず、頂点にいるのが、以下の組織です。
ICANN(Internet Corporation for Assigned Names and Numbers、アイキャン)
ICANNはIPアドレスの管理のほか、ドメインの管理、ルートネームサーバの運用などインターネットが正常に機能するための基本機能の運用を行っています。
その次に、各地域ごとに管理組織があります。
APNIC(アジア・オセアニア)
ARIN(北米)
RIPE NCC(欧州・中東)
LACNIC(中南米)
AFRINIC(アフリカ)
更にその次の階層として、国ごとの管理組織があります。
日本だとJPNICですね。
つまり、日本で利用されているグローバルIPアドレスは、以下の流れで払い出されているわけです。
ICANN→APNIC→JPNIC
更にJPNICからキャリアなどのIPアドレス管理指定事業者にアドレスが割り当てられ、そこから利用者に分配されます。
つまり、こうなります。
ICANN→APNIC→JPNIC→Pアドレス管理指定事業者→利用者
なお、各管理組織に割り当てられているIPアドレス情報は公開されており、FTPでリストをダンロードすることも可能です。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
このリストですが、アドレス帯がCIDRではなく、開始IPアドレスとそこから幾つ割り当てているか、という書きっぷりなんですよね。ちょっと見にくいです。
フォーマットは以下のサイトに解説があります。
RIR statistics exchange format
こういった管理組織ですが、国連や政府機関がやっているの?と思いきや、ICANNを含めて民間団体なんですよね。公的な動きをする団体ではあるものの、改めてインターネットは民間のものであると感じますね。
2018年10月19日金曜日
シェアードIPアドレスとは
前回の記事では、プライベートIPアドレスについて簡単に解説しました。IPアドレスの世界にはプライベートIPアドレス以外にも用途が決まっているアドレス帯があります。それが、 シェアードIPアドレス( シェアードアドレス)です。
IPv4のアドレスが不足していく中で、家庭や企業内でプライベートIPアドレスを利用するのと同様に、ISP(回線事業者)ごとに分けたネットワークを構築するというアイディアが生まれました。そうすれば、家庭や企業で最低1つ必要になるグローバルIPアドレスを減らすことができますからね。
ただ、このISP内のIPアドレスはプライベートIPアドレスというわけには行きません。プライベートIPアドレスだと、家庭、企業内のIPアドレスと重複してしまう可能性があるからです。そのため、新たに払い出されたIPアドレス帯がこのシェアードIPアドレスです。
具体的には以下のアドレスになります。
100.64.0.0/10
もし家庭用ルータのIPアドレスが上記アドレス帯であれば、これはシェアードIPアドレスでインターネットから直接はアクセスできない、と判断できるわけです。
参考サイト
シェアードアドレス 日経XTECH
IPv4のアドレスが不足していく中で、家庭や企業内でプライベートIPアドレスを利用するのと同様に、ISP(回線事業者)ごとに分けたネットワークを構築するというアイディアが生まれました。そうすれば、家庭や企業で最低1つ必要になるグローバルIPアドレスを減らすことができますからね。
ただ、このISP内のIPアドレスはプライベートIPアドレスというわけには行きません。プライベートIPアドレスだと、家庭、企業内のIPアドレスと重複してしまう可能性があるからです。そのため、新たに払い出されたIPアドレス帯がこのシェアードIPアドレスです。
具体的には以下のアドレスになります。
100.64.0.0/10
もし家庭用ルータのIPアドレスが上記アドレス帯であれば、これはシェアードIPアドレスでインターネットから直接はアクセスできない、と判断できるわけです。
参考サイト
シェアードアドレス 日経XTECH
2018年10月18日木曜日
プライベートIPアドレスとは
IPアドレス(Internet Protocol Address)というのは、ネットワークに接続をされている機器同士が通信を行うための住所のようなものです。IPアドレスを持たない機器(パソコン、サーバ、ネットワーク機器)は通信を行うことができません。
※これは非常にざっくりとした説明で、OSI参照モデルの第3層だけの話ではあります。
インターネットに接続されている機器が全てIPアドレスを持てばそれはそれで良いのですが、例えば家や会社の中で使うパソコンなどは、インターネットにアクセスすることはあってもインターネットからアクセスされる必要はありません。(逆にセキュリティを考えると、インターネットからパソコンにアクセスできるのは危ないですよね。)また、全てのパソコン等々の機器に一意なIPアドレスを割り振ろうとすると、IPアドレスが足りなくなってしまいます。そんなわけで、閉ざされたネットワークで利用するIPアドレスというのが設定されています。これがプライベートIPアドレスです。
IPv4ではプライベートアドレスとして、以下の3つが用意されています。
・10.0.0.0/8
利用できるアドレス:10.0.0.0~10.255.255.255
・172.16.0.0/12
利用できるアドレス:172.16.0.0~172.31.255.255
・192.168.0.0/16
利用できるアドレス:192.168.0.0~192.168.255.255
これ、結構間違えて使っている環境とかを時々見ます(192.16.1.0/24とかにしちゃったり)。気をつけましょう!
【参考になりそうなサイト】
プライベートネットワーク Wikipedia
IPアドレスとは?をわかりやすく解説します カゴヤのサーバー研究室
※これは非常にざっくりとした説明で、OSI参照モデルの第3層だけの話ではあります。
インターネットに接続されている機器が全てIPアドレスを持てばそれはそれで良いのですが、例えば家や会社の中で使うパソコンなどは、インターネットにアクセスすることはあってもインターネットからアクセスされる必要はありません。(逆にセキュリティを考えると、インターネットからパソコンにアクセスできるのは危ないですよね。)また、全てのパソコン等々の機器に一意なIPアドレスを割り振ろうとすると、IPアドレスが足りなくなってしまいます。そんなわけで、閉ざされたネットワークで利用するIPアドレスというのが設定されています。これがプライベートIPアドレスです。
IPv4ではプライベートアドレスとして、以下の3つが用意されています。
・10.0.0.0/8
利用できるアドレス:10.0.0.0~10.255.255.255
・172.16.0.0/12
利用できるアドレス:172.16.0.0~172.31.255.255
・192.168.0.0/16
利用できるアドレス:192.168.0.0~192.168.255.255
これ、結構間違えて使っている環境とかを時々見ます(192.16.1.0/24とかにしちゃったり)。気をつけましょう!
【参考になりそうなサイト】
プライベートネットワーク Wikipedia
IPアドレスとは?をわかりやすく解説します カゴヤのサーバー研究室
2018年10月17日水曜日
ファイルを1行づつ読み出して処理を行う
phpでファイルを1行づつ最後の行まで読み出す処理です。fopenはどこの行まで読み出すかを指定することも出来るみたいですね。
<?php
/* ファイルポインタをオープン */
$file = fopen("list.txt", "r");
/* ファイルを1行ずつ出力 */
if($file){
while ($line = fgets($file)) {
echo $line;
}
}
/* ファイルポインタをクローズ */
fclose($file);
?>
こちらのサイトを参考にさせて頂きました。
ファイルから1行ずつ読み込む - fgets()
<?php
/* ファイルポインタをオープン */
$file = fopen("list.txt", "r");
/* ファイルを1行ずつ出力 */
if($file){
while ($line = fgets($file)) {
echo $line;
}
}
/* ファイルポインタをクローズ */
fclose($file);
?>
こちらのサイトを参考にさせて頂きました。
ファイルから1行ずつ読み込む - fgets()
2018年10月16日火曜日
2018年10月15日月曜日
Postfix+Gmailの組合せでメール配信環境を構築する
メールを配信できる環境を作るため、Postfixの設定を行いました。本当はPostfix+SendGridの組合せにしようと考えていたのですが、SendGridの審査に多少時間がかかりそうなので、一旦Postfix+Gmailの組合せでメールで飛ばせるようにしておきます。
やり方ですが、以下のサイトを参考にさせて頂きました。
PostfixのメールをGMail経由で送る
上記サイトには記載がないのですが、最近のGoogleアカウントは「安全性の低いアプリの許可」がデフォルト無効になっており、パスワード認証でメールを配信することができません。そのため、本設定を有効にする必要があります。
やり方ですが、以下のサイトを参考にさせて頂きました。
PostfixのメールをGMail経由で送る
上記サイトには記載がないのですが、最近のGoogleアカウントは「安全性の低いアプリの許可」がデフォルト無効になっており、パスワード認証でメールを配信することができません。そのため、本設定を有効にする必要があります。
2018年10月14日日曜日
プルダウンメニューで項目をグループ化する
プルダウンメニューで項目をグループ化するには、以下のようにoptgroup タグを利用します。
<form>
<select>
<optgroup label="英字">
<option value="a">a</option>
<option value="b">b</option>
<optgroup label="数字">
<option value="1">1</option>
<option value="2">2</option>
</optgroup>
</select>
</form>
phpで項目をグループ化する良い方法がないか考えたのですが、一旦保留にします。。。
こちらのサイトを参考にさせて頂きました。
プルダウンメニューをグループ分けする
<form>
<select>
<optgroup label="英字">
<option value="a">a</option>
<option value="b">b</option>
<optgroup label="数字">
<option value="1">1</option>
<option value="2">2</option>
</optgroup>
</select>
</form>
phpで項目をグループ化する良い方法がないか考えたのですが、一旦保留にします。。。
こちらのサイトを参考にさせて頂きました。
プルダウンメニューをグループ分けする
2018年10月13日土曜日
シングルクォート(')を文字列から削除する
すごく悩んだのですが、単純に以下のようにすれば大丈夫でした。
str_replace("'", '',$str)
こちらのサイトを参考にさせて頂きました。
phpで文字列の中に複数ある ' ←(シングルクォート)を削除したいと思いますが、うまく正規表現がかけないので
str_replace("'", '',$str)
こちらのサイトを参考にさせて頂きました。
phpで文字列の中に複数ある ' ←(シングルクォート)を削除したいと思いますが、うまく正規表現がかけないので
2018年10月12日金曜日
文字列を特定の文字で区切って配列に入れる
区切り文字を指定して配列に入れたい場合は、explode関数を使うようです。
こんな感じです。
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
こちらのサイトを参考にさせて頂きました。
explode
こんな感じです。
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
こちらのサイトを参考にさせて頂きました。
explode
2018年10月11日木曜日
文字列を置換する
文字列内の特定の文字を置換するには、strtr関数を利用するそうです。
こんな感じです。
$str = 'This year is 2016 years.';
//部分文字列を検索して置換する
$result = strtr($str, '2016', '2017');
echo $result;
結果
This year is 2017 years.
こちらのサイトを参考にさせて頂きました。
【PHP入門】文字列の置換 | str_replace・str_ireplace・strtr
こんな感じです。
$str = 'This year is 2016 years.';
//部分文字列を検索して置換する
$result = strtr($str, '2016', '2017');
echo $result;
結果
This year is 2017 years.
こちらのサイトを参考にさせて頂きました。
【PHP入門】文字列の置換 | str_replace・str_ireplace・strtr
2018年10月10日水曜日
pre要素で折り返し表示させる
あまり良くないという記述を発見したものの、コマンドの実行結果を表示するのにpre要素を利用しています。現在作成中の機能では1行が長い出力結果が出る場合があるのですが、画面レイアウトが崩れました。。。
調べたところ、CSSで折り返しするように指定できるみたいです。
こんな感じです。
pre {
white-space: pre-wrap ;
}
こちらのサイトを参考にさせて頂きました。
pre要素で折り返し改行させる方法
調べたところ、CSSで折り返しするように指定できるみたいです。
こんな感じです。
pre {
white-space: pre-wrap ;
}
こちらのサイトを参考にさせて頂きました。
pre要素で折り返し改行させる方法
2018年10月9日火曜日
dateで時間を取得するとUTC(協定世界時)になっちゃう問題
phpで結果をログに出す処理でdate関数を使ったところ、時刻がずれていることに気付きました。UTCで出てますね。
で、調べたところphp.iniでタイムゾーンを設定すれば良さそうです。
こんな感じです。
date.timezone = Asia/Tokyo
こちらのサイトを参考にさせて頂きました。
【xampp1.7.4】date関数で時刻を表示させると日本標準時(JST)より8時間遅れる原因
処理の中でも変更できるみたいですね。
今回はまとめて設定したかったのでphp.iniで対応してしまいましたが。
で、調べたところphp.iniでタイムゾーンを設定すれば良さそうです。
こんな感じです。
date.timezone = Asia/Tokyo
こちらのサイトを参考にさせて頂きました。
【xampp1.7.4】date関数で時刻を表示させると日本標準時(JST)より8時間遅れる原因
処理の中でも変更できるみたいですね。
今回はまとめて設定したかったのでphp.iniで対応してしまいましたが。
2018年10月8日月曜日
PHPでコマンドを呼び出す際に入力値をエスケープする
サニタイジングというと色々ややこしい話になりそうですが、やはり外部からの入力値に危ない文字列が含まれるリスクは考慮しておく必要があります。例えば入力値を変数としてコマンドを実行する場合、以下のような複数の対策を取る必要があります。
PHPの場合は以下の関数を利用するようです。
escapeshellarg()
更に、万が一のことを考え、実行させるユーザの権限を最小限のものにしておく必要があります。
まあ、そもそもPHPからコマンドを呼び出すような実装をするなと言う話はありますが、自分が作りたいものにコマンド実行ありきのものが多いのです。でも、今後SQLとかを実行する際にも役立つと思うので、勉強がてら慎重に作っていこうと思います。
こちらのサイトを参考にさせて頂きました。
サニタイズ/入力値検証/エスケープの考え方
- 入力値チェック
- エスケープ
- コマンド実行ユーザ権限を必要最低限のものとする
PHPの場合は以下の関数を利用するようです。
escapeshellarg()
更に、万が一のことを考え、実行させるユーザの権限を最小限のものにしておく必要があります。
まあ、そもそもPHPからコマンドを呼び出すような実装をするなと言う話はありますが、自分が作りたいものにコマンド実行ありきのものが多いのです。でも、今後SQLとかを実行する際にも役立つと思うので、勉強がてら慎重に作っていこうと思います。
こちらのサイトを参考にさせて頂きました。
サニタイズ/入力値検証/エスケープの考え方
2018年10月7日日曜日
名前解決確認
名前解決のテストを行う機能を作成しました。こちらになります。
名前解決確認(nslookup/dig)
このページで名前解決確認を行うと、nslookupとdigの両方を実行してくれます。digの方が実際のDNSレコードのイメージで出力されるので見やすいと思うのですが、自分も含めて名前解決と言えばnslookupだよね、と考えている人も多いかと思い、両方出力するようにしました。
オプションはレコードと利用するDNSサーバだけにしています。コマンド自体は色々なオプションが用意はされているのですが、画面にオプションを増やすと分かりにくくなってしまうかと思い、今回はシンプルにしてみました。再帰しないとか、debugとかはニーズもあるかとは考えたのですが、一旦保留です。
nslookupとdigの出力結果の解説も作ろうかとは思ったのですが、まあ少し調べると色々出てきますし、そもそも名前解決を確認しようとする人はそのくらい分かるかなということで、今回は作成してません。一応、参考になりそうなサイトをご紹介しておきます。
nslookupの基本的な使い方(イントラネット編)
奥が深いDNSサーバーとdigコマンド
名前解決確認(nslookup/dig)
このページで名前解決確認を行うと、nslookupとdigの両方を実行してくれます。digの方が実際のDNSレコードのイメージで出力されるので見やすいと思うのですが、自分も含めて名前解決と言えばnslookupだよね、と考えている人も多いかと思い、両方出力するようにしました。
オプションはレコードと利用するDNSサーバだけにしています。コマンド自体は色々なオプションが用意はされているのですが、画面にオプションを増やすと分かりにくくなってしまうかと思い、今回はシンプルにしてみました。再帰しないとか、debugとかはニーズもあるかとは考えたのですが、一旦保留です。
nslookupとdigの出力結果の解説も作ろうかとは思ったのですが、まあ少し調べると色々出てきますし、そもそも名前解決を確認しようとする人はそのくらい分かるかなということで、今回は作成してません。一応、参考になりそうなサイトをご紹介しておきます。
nslookupの基本的な使い方(イントラネット編)
奥が深いDNSサーバーとdigコマンド
2018年10月6日土曜日
DNSレコードとは
DNS(Domain Name System)はホスト名や役割などをIPアドレスと紐付けて管理する、インターネットの重要な仕組みの1つです。この紐付けが具体的に記載されているものがDNSレコードです。DNSレコードはいくつも種類がありますが、ここでは主要なものを紹介します。
TXTレコードは色々な使い方をしますし、上記以外にもSRVレコードやCAAレコードなども時々登場します。奥深い世界ですね。
以下、参考リンクです。
DNSレコードタイプの一覧 Wikipedia
主なDNSレコードの種類 @IT
Aレコード | ホストのIPアドレス(ipv4) |
AAAAレコード | ホストのIPアドレス(ipv6) |
PTRレコード | IPアドレスに対するホスト名、つまりAレコードの逆 |
CNAMEレコード | ホスト名のエイリアス(別名) |
TXTレコード | ホストへのテキスト情報 |
NSレコード | ドメインのDNSサーバ |
MXレコード | ドメインのメールサーバ |
SOAレコード | ドメインの情報 |
TXTレコードは色々な使い方をしますし、上記以外にもSRVレコードやCAAレコードなども時々登場します。奥深い世界ですね。
以下、参考リンクです。
DNSレコードタイプの一覧 Wikipedia
主なDNSレコードの種類 @IT
2018年10月5日金曜日
2018年10月4日木曜日
ファイルに追記する
PHPで処理を行うたびにログに記録するようにしたいと思い、ログファイルに追記する処理を探しました。いくつかやり方はあるようですが、こちらを採用しました。
<?php
// 書き込みモード(追記)でファイルを開く
$fp = fopen("fwrite.txt", "a");
// ファイルに書き込む
fwrite($fp, "add sample");
// ファイルを閉じる
fclose($fp);
?>
こちらのサイトを参考にさせて頂きました。
fopen関数から始める!ファイルの読み込み・書き込み方法【PHP入門】
<?php
// 書き込みモード(追記)でファイルを開く
$fp = fopen("fwrite.txt", "a");
// ファイルに書き込む
fwrite($fp, "add sample");
// ファイルを閉じる
fclose($fp);
?>
こちらのサイトを参考にさせて頂きました。
fopen関数から始める!ファイルの読み込み・書き込み方法【PHP入門】
2018年10月3日水曜日
文字列を検索する
特定の文字列が含まれているか、で条件分岐をしたい場合、以下のようにすれば良い。
if(strpos($subject,'bc') !== false){
//'abcd'のなかに'bc'が含まれている場合
}
if(strpos($subject,'bc') === false){
//'abcd'のなかに'bc'が含まれていない場合
}
preg_matchで正規表現を指定するよりも、処理が早いそうです。
こちらのサイトを参考にさせて頂きました。
【PHP】特定の文字列を含むかのチェック
if(strpos($subject,'bc') !== false){
//'abcd'のなかに'bc'が含まれている場合
}
if(strpos($subject,'bc') === false){
//'abcd'のなかに'bc'が含まれていない場合
}
preg_matchで正規表現を指定するよりも、処理が早いそうです。
こちらのサイトを参考にさせて頂きました。
【PHP】特定の文字列を含むかのチェック
2018年10月2日火曜日
FQDN、IPアドレスを正規表現で記載する
FQDNについては、こんな感じでできるようです。
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-\.]{0,61}[a-zA-Z0-9])+\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])*$
こちらのサイトを参考にさせて頂きました。
[regex] DNSホスト名またはIPアドレスに一致する正規表現ですか?
IPアドレスについては、こんな感じでできるようです。
^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
こちらのサイトを参考にさせて頂きました。
IPアドレスの正規表現について
(2019/07/17追記)
FQDNの正規表現を修正しました。まだ怪しい感じですが、多少改善されたかと。
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-\.]{0,61}[a-zA-Z0-9])+\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])*$
こちらのサイトを参考にさせて頂きました。
[regex] DNSホスト名またはIPアドレスに一致する正規表現ですか?
IPアドレスについては、こんな感じでできるようです。
^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
こちらのサイトを参考にさせて頂きました。
IPアドレスの正規表現について
(2019/07/17追記)
FQDNの正規表現を修正しました。まだ怪しい感じですが、多少改善されたかと。
2018年10月1日月曜日
pingコマンド、実行結果の見方について
本記事ではPing疎通テストの解説を行います。
1.Pingとは
pingとはPacket INternet Groperの略で、対向のサーバ、ネットワークと通信できるかを確認するコマンドです。pingはICMP(Internet Control Message Protocol)というIP層のプロトコルを利用します。
2.pingコマンド
pingコマンドはWindowsにもLinuxにも用意されています。基本的な使い方は同じですが、オプションが異なります。Suama Online Serviceの環境はLinux(CentOS)で動作していますので、Linux用のオプションを指定して実行しています。
実行するコマンドは以下のとおりです。
ping -c5 [対象ホスト]
-c5:これは実行する回数を5回に指定しています。
※Windowsはオプション無しだと4回しか実行しませんが、LinuxはCtl+Cで止めるまで無限に実行し続けます。
これ以外にも幾つかオプションが用意されています。詳細は以下のサイトをご参照下さい。
【Linux】pingコマンドの使い方
3.実行結果の見方について
次のコマンドを実行した場合、
ping -c5 www.example.com
次のような実行結果が返ります。
--------
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=53 time=107 ms
--- www.example.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 107.564/107.602/107.660/0.416 ms
--------
1行目は疎通確認対象情報です。IPアドレスの場合はアドレスのみ記載されますが、FQDNで指定した場合、名前解決の結果が表示されます。
2行目からが実行結果で、64 bytesはテストに利用したパケットデータサイズ、fromは疎通テスト先、icmp_seqは何番目のパケットか、となっています。ttlはネットワークパケットのTTL(Time To Live)で、最初は64でネットワーク機器を経由するたびに1減ります。そのため、ttlを確認するとそのパケットがどれだけのネットワーク機器を経由したかが分かります。ttlが0になるとそのパケットは転送されなくなります。timeは応答時間で、少ないほど遅延の少ない通信が行えていることが分かります。
ping statisticsはpingコマンド実行結果のサマリです。結果の1行目は結果サマリで、2行目が分析結果となっています。
2行目にはmin(最速)、max(最遅値)、ave(平均値)、mdev(偏差)が表示されます。偏差で通信の安定性を判断することができます。が、今回の場合はサンプルが少ないので、あまり参考にはなりませんね。
以下のサイトを参考にさせて頂きました。
pingコマンドについて詳しくまとめました 【Linuxコマンド集】
1.Pingとは
pingとはPacket INternet Groperの略で、対向のサーバ、ネットワークと通信できるかを確認するコマンドです。pingはICMP(Internet Control Message Protocol)というIP層のプロトコルを利用します。
2.pingコマンド
pingコマンドはWindowsにもLinuxにも用意されています。基本的な使い方は同じですが、オプションが異なります。Suama Online Serviceの環境はLinux(CentOS)で動作していますので、Linux用のオプションを指定して実行しています。
実行するコマンドは以下のとおりです。
ping -c5 [対象ホスト]
-c5:これは実行する回数を5回に指定しています。
※Windowsはオプション無しだと4回しか実行しませんが、LinuxはCtl+Cで止めるまで無限に実行し続けます。
これ以外にも幾つかオプションが用意されています。詳細は以下のサイトをご参照下さい。
【Linux】pingコマンドの使い方
3.実行結果の見方について
次のコマンドを実行した場合、
ping -c5 www.example.com
次のような実行結果が返ります。
--------
PING www.example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=2 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=3 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=4 ttl=53 time=107 ms
64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=5 ttl=53 time=107 ms
--- www.example.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 107.564/107.602/107.660/0.416 ms
--------
1行目は疎通確認対象情報です。IPアドレスの場合はアドレスのみ記載されますが、FQDNで指定した場合、名前解決の結果が表示されます。
2行目からが実行結果で、64 bytesはテストに利用したパケットデータサイズ、fromは疎通テスト先、icmp_seqは何番目のパケットか、となっています。ttlはネットワークパケットのTTL(Time To Live)で、最初は64でネットワーク機器を経由するたびに1減ります。そのため、ttlを確認するとそのパケットがどれだけのネットワーク機器を経由したかが分かります。ttlが0になるとそのパケットは転送されなくなります。timeは応答時間で、少ないほど遅延の少ない通信が行えていることが分かります。
ping statisticsはpingコマンド実行結果のサマリです。結果の1行目は結果サマリで、2行目が分析結果となっています。
2行目にはmin(最速)、max(最遅値)、ave(平均値)、mdev(偏差)が表示されます。偏差で通信の安定性を判断することができます。が、今回の場合はサンプルが少ないので、あまり参考にはなりませんね。
以下のサイトを参考にさせて頂きました。
pingコマンドについて詳しくまとめました 【Linuxコマンド集】
ローカルアドレス(プライベートアドレス)を正規表現で記載する
まあ、こういうことですよね。
(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
こちらのサイトを参考にさせて頂きました。
プライベートIPアドレスとその正規表現
正規表現のチェックはこちらのサイトが便利です!
PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1
こちらのサイトで確認する際はこんな風↓にデリミタ(区切り文字)を付ける必要がります。
/(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/u
(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)
こちらのサイトを参考にさせて頂きました。
プライベートIPアドレスとその正規表現
正規表現のチェックはこちらのサイトが便利です!
PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1
こちらのサイトで確認する際はこんな風↓にデリミタ(区切り文字)を付ける必要がります。
/(^127\.)|(^169\.254\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/u
2018年9月30日日曜日
文字列が全て半角英数字か調べる
こんな感じでできるようです。
<?php
$str = "あいうえaおかきくあけ";
if (preg_match("/^[a-zA-Z0-9.]+$/", $str)) {
echo "すべて半角英数である";
} else {
echo "すべて半角英数ではない";
}
?>
preg_match()が色々と正規表現が使えて便利ということですね。
こちらのサイトを参考にさせて頂きました。
正規表現:すべて半角数字かどうか調べる表現:すべて半角数字かどうか調べる
<?php
$str = "あいうえaおかきくあけ";
if (preg_match("/^[a-zA-Z0-9.]+$/", $str)) {
echo "すべて半角英数である";
} else {
echo "すべて半角英数ではない";
}
?>
preg_match()が色々と正規表現が使えて便利ということですね。
こちらのサイトを参考にさせて頂きました。
正規表現:すべて半角数字かどうか調べる表現:すべて半角数字かどうか調べる
2018年9月29日土曜日
ページがモバイル フレンドリーではありません。
Suama Online ServiceのページがGoogle検索で表示されるか確認していたところ、検索結果に「ページがモバイル フレンドリーではありません。」との表示が!
何だこれと思って調べてみたのですが、サイト管理者にだけ表示されるものみたいです。Googleが世の中全体に向けてこのサイトがダメだとアピールしだしたのかと思い、焦りました(笑)
リンクをクリックすると、モバイルフレンドリーテストというページに飛びます。で、以下の4つがダメですと表示されました。
何だこれと思って調べてみたのですが、サイト管理者にだけ表示されるものみたいです。Googleが世の中全体に向けてこのサイトがダメだとアピールしだしたのかと思い、焦りました(笑)
リンクをクリックすると、モバイルフレンドリーテストというページに飛びます。で、以下の4つがダメですと表示されました。
- テキストが小さすぎて読めません
- ビューポートが設定されていません
- コンテンツの幅が画面の幅を超えています
- クリック可能な要素同士が近すぎます
なるほど、確認すると確かにスマホで見ると表示が非常に小さいです。取り敢えずviewportを設定しよう、ということで以下の設定を各ページに入れました。
<meta name=viewport content="width=device-width, initial-scale=1">
再度モバイルフレンドリーテストで確認を行うと、モバイルフレンドリーです、と表示されました!でもまあ、表示は大きくなったのですが使いにくいですね。。。今後の検討としましょう。
参考にさせて頂いたサイト
「viewport設定て何だよ、面倒くさい!」→実は一番脳みそ使わない問題。 スマホ対応 最前線ブログ
2018年9月28日金曜日
決まった範囲を選択してクリップボードにコピーするjava script処理
出力結果をクリップボードにコピーする処理をjava scriptで作成しました。正直java scriptはまだ良くわかっていないので現時点ではあまり利用したくないのですが、こういった処理はjava scriptを使わないわけには行きませんね。。。
処理
function TextareaSelected() {
document.form2.output1.focus();
document.form2.output1.select();
document.execCommand("Copy");
}
実行するボタン
<input class="button2" type="button" value="パスワードをクリップボードにコピー" onClick="TextareaSelected()">
選択するフォーム
<form name="form2">
<textarea id="output1" name="output1">
ここに出力結果を表示
</textarea>
</form>
実際に作成したページはこちらです。
パスワード自動生成
以下のサイトを参考にさせて頂きました。
6. テキストエリアをボタンで全選択する 仕掛けで見せる! WEBデザインTIPS & TRICS
処理
function TextareaSelected() {
document.form2.output1.focus();
document.form2.output1.select();
document.execCommand("Copy");
}
実行するボタン
<input class="button2" type="button" value="パスワードをクリップボードにコピー" onClick="TextareaSelected()">
選択するフォーム
<form name="form2">
<textarea id="output1" name="output1">
ここに出力結果を表示
</textarea>
</form>
実際に作成したページはこちらです。
パスワード自動生成
以下のサイトを参考にさせて頂きました。
6. テキストエリアをボタンで全選択する 仕掛けで見せる! WEBデザインTIPS & TRICS
2018年9月27日木曜日
パスワードを生成する
パスワードを自動生成するページを作成しました。
パスワード自動生成
パスワードを自動生成するサイトは既に世の中にたくさんありますが、自分もよく利用する機能であること、既存のサイトでイマイチ使い勝手が、と思うところがあるので作成してみました。
あまりデザインセンスがないページになってしまいました。が、機能的には以下の3点ほどこだわってみました。
シンプルな作りは全体のコンセプトの1つです。文字列数についてはここまで文字列が必要か、というのはありますが、最近はブラウザにパスワードを覚えさせてしまうことも多いので覚える必要も減っています。それであれば、なるべく長いパスワードも生成できたらなと思い、最大128文字を設定しています。256文字までというのも考えたのですが、まあそこまでは不要かなと。実装自体は難しくはないんですけどね。あとは、クリップボードにコピー出来る機能です。パスワードをテキストでダウンロードできるサイトもあるのですが、個人的にはコピーを簡単にできれば、その方が手間がかからないのではないかと日々思っていました。
作成してから思ったのですが、本当はパスワード生成処理はクライアントサイド、つまりjava scriptで生成したほうが、より安心なのかもしれません。勿論、本サイトでは生成したパスワードを保持しているわけではないので安全ではあるのですが、それはサーバ側の主張ですからね(自分で言うのもなんですが)。でもまあ、サーバ側ではパスワードの用途も分からないですし、そこまで問題ないのかも。
パスワード自動生成
パスワードを自動生成するサイトは既に世の中にたくさんありますが、自分もよく利用する機能であること、既存のサイトでイマイチ使い勝手が、と思うところがあるので作成してみました。
あまりデザインセンスがないページになってしまいました。が、機能的には以下の3点ほどこだわってみました。
- シンプルな作り
- パスワードの文字列を最大128文字まで選択できる
- 作成したパスワードをそのままクリップボードにコピーできる
シンプルな作りは全体のコンセプトの1つです。文字列数についてはここまで文字列が必要か、というのはありますが、最近はブラウザにパスワードを覚えさせてしまうことも多いので覚える必要も減っています。それであれば、なるべく長いパスワードも生成できたらなと思い、最大128文字を設定しています。256文字までというのも考えたのですが、まあそこまでは不要かなと。実装自体は難しくはないんですけどね。あとは、クリップボードにコピー出来る機能です。パスワードをテキストでダウンロードできるサイトもあるのですが、個人的にはコピーを簡単にできれば、その方が手間がかからないのではないかと日々思っていました。
作成してから思ったのですが、本当はパスワード生成処理はクライアントサイド、つまりjava scriptで生成したほうが、より安心なのかもしれません。勿論、本サイトでは生成したパスワードを保持しているわけではないので安全ではあるのですが、それはサーバ側の主張ですからね(自分で言うのもなんですが)。でもまあ、サーバ側ではパスワードの用途も分からないですし、そこまで問題ないのかも。
変数が数値であるかをチェックする
色々やり方はあるようですが、こちらを採用しました。
PHPで数値をチェックする4つの方法を比較
PHPは変数の型があいまいでも動いてしまうので、楽ではありますが想定外の動きをするリスクはありますよね。
(!preg_match('/^[0-9]+$/', $int))以下のサイトを参考にさせて頂きました。
PHPで数値をチェックする4つの方法を比較
PHPは変数の型があいまいでも動いてしまうので、楽ではありますが想定外の動きをするリスクはありますよね。
2018年9月24日月曜日
テキストエリアの出力テキストをテキストファイルとしてダウンロードする
テキストエリアの出力テキストをテキストファイルとしてダウンロードするjavascriptのサンプルです。
function handleDownload() {以下のサイトを参考にさせて頂きました。
var content = document.getElementById( "output1" ).value ;
var blob = new Blob([ content ], { "type" : "text/plain" });
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, "test.txt");
// msSaveOrOpenBlobの場合はファイルを保存せずに開ける
window.navigator.msSaveOrOpenBlob(blob, "test.txt");
} else {
document.getElementById("download").href = window.URL.createObjectURL(blob);
}
}
ボタン
<input type="submit" value="ダウンロード" onClick="handleDownload()">
テキストエリア
<textarea id="output1">テスト</textarea>
JavaScriptでファイルダウンロード処理を実現する
入力フォームの値を取得する方法
2018年9月23日日曜日
数字を選択するプルダウンメニュー
PHPを利用して数字部分を生成し、プルダウンメニューを作成するサンプルです。
<?php
#数字選択プルダウンメニュー
$html = "<select name=\"kazu\">\n";
for ($i=1;$i<=128;$i++){
$html.="<option value=\"$i\">$i</option>\n";
}
$html.= "</select>";
print $html;
?>
2018年9月18日火曜日
CSSでテーブルの幅を調整する
テーブルを作成したのですが、変なふうに改行されてしました。ということで、CSSで幅を調整しました。こんな感じです。
以下のサイトを参考にさせていただきました。
HTMLのtableでテーブル(表)を作る方法とCSSのデザイン調整解説
完成したサイトは以下のものです。
WEB接続環境確認
table{
width: 100%;
}
th.koumoku{
width: 20%;
}
th.hensu{
width: 20%;
}
th.atai{
width: 60%;
}
以下のサイトを参考にさせていただきました。
HTMLのtableでテーブル(表)を作る方法とCSSのデザイン調整解説
完成したサイトは以下のものです。
WEB接続環境確認
2018年9月17日月曜日
接続元のWEB環境を表示する
接続元IPアドレス表示に引き続き、接続元のアクセス環境を表示するページを作成します。
以下のサイトを参考にさせていただきました。
PHPでユーザー・アクセス情報を表示する
これについては参考にするという、ほぼそのままですね。表示させる内容はPHPの変数で取得できるものだけにしています。JavaScriptを利用すればもっと色々取得して表示させることが出来るとは思うのですが、一旦そちらには手を出さず、シンプルな作りにしました。
完成したサイトが以下のものです。
WEB接続環境確認 Suama Online Service
以下のサイトを参考にさせていただきました。
PHPでユーザー・アクセス情報を表示する
これについては参考にするという、ほぼそのままですね。表示させる内容はPHPの変数で取得できるものだけにしています。JavaScriptを利用すればもっと色々取得して表示させることが出来るとは思うのですが、一旦そちらには手を出さず、シンプルな作りにしました。
完成したサイトが以下のものです。
WEB接続環境確認 Suama Online Service
2018年9月16日日曜日
接続元のIPアドレスを表示する
接続元のIPアドレスを表示するサイトは、シンプルに作れそう&結構よく使うということで、最初に作成してみました。
今回PHPで環境を作成しています。
以下のサイトを参考にさせていただきました。
PHPでIPアドレスを取得する:$_SERVER変数, gethostbyname
接続元IPアドレスを表示するのは変数を表示させるだけで良いのですね。簡単で良いです。
こちらは以下のサイトを参考にさせていただきました。
[PHP] アクセス元のホスト名を取得する
先程の接続元IPを利用して、ホスト名を解決させるという感じですね。
IPアドレス確認 Suama Online Service
今回PHPで環境を作成しています。
以下のサイトを参考にさせていただきました。
PHPでIPアドレスを取得する:$_SERVER変数, gethostbyname
接続元IPアドレスを表示するのは変数を表示させるだけで良いのですね。簡単で良いです。
echo $_SERVER['REMOTE_ADDR'];IPアドレスだけだと寂しい気がしてきたので、ホスト名も表示するようにしました。
こちらは以下のサイトを参考にさせていただきました。
[PHP] アクセス元のホスト名を取得する
先程の接続元IPを利用して、ホスト名を解決させるという感じですね。
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);echo $host完成したサイトが以下のサイトです。
IPアドレス確認 Suama Online Service
2018年9月15日土曜日
Suama Online Serviceとは
Suama Online Serviceは普段IT技術の中でもインフラレイヤに関わっている1エンジニアが、フロントエンドやプログラミングについても学習しよう!、ということで構築しているWEBサービス群です。
基本コンセプトは以下のとおりです。
本サービスは個人利用、商用利用を問わず、自由に無料でご利用頂くことが可能です。ただし、以下の留意事項があります。
お好きなページをリンク先として頂いて構いません。
よろしくお願いします。
本サイトが使用しているアクセス解析ツールについて
本サイトに掲載されている広告について
基本コンセプトは以下のとおりです。
- なるべくシンプルに
- 既に世の中にあるものも、再度作ったって良いじゃない
- 自分が使いたくなるものを
本サービスは個人利用、商用利用を問わず、自由に無料でご利用頂くことが可能です。ただし、以下の留意事項があります。
- 法令、モラルに反するご利用はご遠慮ください。
- 本サービス利用に際して発生したトラブル、損害等については一切保証いたしません。
- 本サービスに異常に負荷をかける利用のされ方をした場合、利用の停止を求めたり、接続を切断させて頂く場合があります。
- 本サービスは可能な限り継続するよう努力致しますが、予告なく停止する可能性もありますので、その旨ご了承下さい。
お好きなページをリンク先として頂いて構いません。
よろしくお願いします。
本サイトが使用しているアクセス解析ツールについて
- 本サイトでは、サイトの分析と改善のためにGoogleアナリティクスを使用しています
- 本サイトをご利用中のウェブブラウザは、Google に特定の情報(例えば、アクセスしたページのウェブ アドレスや IP アドレスなど)を自動的に送信します
- データ収集のためにGoogle がお使いのブラウザに cookie を設定したり、設定済みのcookieを読み取ったりする場合があります。
- 利用者は、本サイトを利用することで、上記方法および目的においてGoogleが行うこうしたデータ処理につき許可を与えたものとみなします。
本サイトに掲載されている広告について
- 本サイトではでは、第三者配信の広告サービス(Googleアドセンス)を利用しています。
- このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 cookie (例えば、アクセスしたページのウェブ アドレスや IP アドレスなど)を使用することがあります。
- 利用者は、本サイトを利用することで、上記方法および目的においてGoogleが行うこうしたデータ処理につき許可を与えたものとみなします。
リスト(ul,li)を縦横に並べる
トップページに機能一覧を鉢したいのですが、AWSの機能一覧みたいに並べたいなと思います。で、やり方を調べたところ、まさにやりたい事が纏めてあるサイトがありました。
CSSでリストから表を作る方法!2列、3列、4列のレイアウトはこうすれば良いけど罫線が問題
今回はサンプル3を利用させていただきました。
あとは少し行間を調整します。
【CSS】line-heightで行間を調整する方法:おすすめの値は?
CSSでリストから表を作る方法!2列、3列、4列のレイアウトはこうすれば良いけど罫線が問題
今回はサンプル3を利用させていただきました。
ul.listtest3 {
display: table;
width:100%;
}
ul.listtest3 > li:nth-child(3n+1) {
clear: both;
}
ul.listtest3 > li {
display: table-cell;
float: left;
width: 33%;
}
あとは少し行間を調整します。
【CSS】line-heightで行間を調整する方法:おすすめの値は?
2018年9月2日日曜日
bloggerで独自ドメインを設定する
このブログがgoogleが提供しているブログサービスであるbloggerを利用しています。bloggerの場合、標準でXXX.blogspot.comというURLが割り当てられるのですが(XXXの部分は任意)、今回は独自ドメインを設定してみました。
設定方法については、以下のサイトに詳しく記載されていますので、そちらをご参照下さい。
2018年版 Blogger のサイトを独自ドメインに設定する方法 ブロギングライフ
bloggerだと独自ドメインでも簡単にHTTPS化できます。こちらについても以下のサイトに分かりやすく記載されています。
独自ドメインのBloggerでHTTPSを有効にする設定方法 ブロギングライフ
さて、今回.onlというあまり見覚えのないドメインを取得しました。本当は.netとかもっとメジャーなドメインで取得したかったのですが、はやりメジャーなドメインは既に他の方が取得されていましたね。まあ、onlはオンラインを表すドメインということなので、まあ良いかな?ということで選択しました。onlineというドメインもあるのですが、お名前.comだと結構高いんですよね。
設定方法については、以下のサイトに詳しく記載されていますので、そちらをご参照下さい。
2018年版 Blogger のサイトを独自ドメインに設定する方法 ブロギングライフ
bloggerだと独自ドメインでも簡単にHTTPS化できます。こちらについても以下のサイトに分かりやすく記載されています。
独自ドメインのBloggerでHTTPSを有効にする設定方法 ブロギングライフ
さて、今回.onlというあまり見覚えのないドメインを取得しました。本当は.netとかもっとメジャーなドメインで取得したかったのですが、はやりメジャーなドメインは既に他の方が取得されていましたね。まあ、onlはオンラインを表すドメインということなので、まあ良いかな?ということで選択しました。onlineというドメインもあるのですが、お名前.comだと結構高いんですよね。
登録:
投稿 (Atom)