XAMPPとIISの競合について

IISでローカルのPHPの開発環境を構築して勉強をしていたが
諸々考えてくとXAMPPで環境構築した方がはかどることに気づいて乗り換えた。

その時に,ポートが競合してハマったのでメモ。

現象

XAMPPインストール後に,Apacheを起動しようとすると
Port 80 in use by "Unable to open process" with PID 4!

と怒られる。

解決策

IISがポート80を使用していたため,inetmgrからIISを停止すれば解決する。

以上

viでphp-docのコメントを自動生成するプラグイン(PDV – phpDocumentor for Vim)

本体のダウンロード

Downoad

プラグイン用フォルダの生成

vim用のプラグインを導入するのは初めてなので作成しておく

$mkdir ~/.vim

.vimファイルの移動

$mv (ダウンロードしたファイルのパス) ~/.vim/

.bashrcへの記述を追加

$vim ~/.vimrc

下記を追加

" PDV - phpDocumentor for Vim
source ~/.vim/php-doc.vim
inoremap <C-P> <ESC>:call PhpDocSingle()<CR>i 
nnoremap <C-P> :call PhpDocSingle()<CR> 
vnoremap <C-P> :call PhpDocRange()<CR>

.vimrcも更新しておいた。

https://github.com/nekonisi/Tools/tree/master/Vim

以上

Windows10でPHPの実行環境構築

IISを利用して,PHPの実行環境を構築する。

IISの有効化と”Hello html!”まで

  1. Windowsボタン + Rを押下 > controlと入力(コンパネを開く)
  2. 「プログラムと機能」 > 左パネルよりWindowsの機能の有効化と無効化を選択
  3. 下記を参考にチェックをつける。
    インターネットインフォメーションサービス
    > World Wide Webサービス
    > アプリケーション開発機能
    > CGI <-チェックインターネットインフォメーションサービス
    > Web管理ツール <-チェック
  4. OKボタンを押下するとインストールが開始される。
  5. C:\inetpub\wwwroot\の既存ファイルを削除(ndex.htmlを作成し,HelloWorldと入力
    (書き込み権がなかったら,wwwrootを選択しAlt + Enterを押下。
    セキュリティ > 編集より書き込み権限を付与する。)
  6. 任意のブラウザでhttp://localhostにアクセス。

以上


PHPの有効化

  1. https://windows.php.net/download/よりWindows用のPHP(zip)をダウンロード
  2. C:\inetpub\php配下に展開(どこでもいいんだけどね)
    権限が必要と言われるけど,「はい」でOK
  3. php.ini-productionをphp.iniにリネーム
  4. php.iniに任意のエディタで下記を追記する。
    (本当はコメントアウトして設定したほうがいいけど。)

    extension_dir = "ext" cgi.fix_pathinfo=1 fastcgi.impersonate = 1 fastcgi.logging = 0 extension=mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = auto

    TODO: 設定項目に関する説明を別投稿にまとめる。

  5. 「VCRUNTIME140.dllが見つからないため~」とエラーが表示された場合はVCRUNTIME140.dllをインストールする。
    1. ダウンロードサイト
    2. 自分のOSのCPUのビット数に合わせること
      64bit -> x64
      32bit -> x86
    3. 落としたexeを実行すればOK
  6. 2の手順で展開したフォルダC:\inetpub\phpにフォーカスを合わせAlt + Enterを押下
  7. セキュリティタブ > 編集より,セキュリティ画面を開く
  8. 追加ボタンを押下し,「ユーザまたはグループの選択」ダイアログを開く
    「選択するオブジェクト名を入力してください」テキストボックスに「IIS_IUSRS」と入力。
  9. 「名前を確認」ボタンを押下
    「名前が見つかりません。」ダイアログが開かれた場合は,名前が間違ってる可能性があるので,「IIS_IUSRS」のスペルを確認!
  10. Windowボタン + Rを押下し,inetmgrと入力
  11. ハンドラーマッピングをダブルクリック
  12. 右パネルより,モジュールマップの追加を選択
  13. 下記を参考に設定を行う。
    要求パス: *.php
    モジュール: FastCgiModule
    実行可能ファイル: C:\inetpub\php\php-cgi.exe
    名前: PHP

    設定はこれで完了。

動作確認

C:\inetpub\wwwroot\test.phpを作成し,下記をコピペ

<?php
//ここを書き換える。
$name="nekonisi";


$fp=fopen("http://abehiroshi.la.coocan.jp/top.htm","r");
$arr=array();
$arrVal=array();
while(!feof($fp)){
	$data = mb_convert_encoding(fgets($fp), 'UTF-8', 'sjis-win');
	array_push($arrVal,$data);
}
$arr=preg_replace("(阿部 寛)",$name,$arrVal);



foreach($arr as $val){
	echo ($val);
}
?>

以上

AWSのセキュリティに関する設定

このブログはAWSのlightsailを使用して作成されている。
ネットワークの知識が希薄なため,Qiitaの記事を参考になんとなく作成されていたが,この機会にセキュリティを強化しようと思い記事を作成した。

クラウドサーバ自体のセキュリティに関して

オンプレミス(実機を使ったサーバ構築)と比較し,クラウドサーバのセキュリティは甘いのか?という疑問があるだろう。

確かに,オンプレミス型のサーバと異なり,クラウドサーバは誰でもアクセスすることができるため,不正アクセスの危険性はある。

オンプレミス型のサーバの場合,システム管理者がセキュリティパッチを当てて,最新化しなければならないが,AWSの場合,Amazon社がこれをカバーしてくれるため,情弱でも安心して使用できるという一面もある。

セキュリティグループの設定について

注意点として,セキュリティグループ。ファイアウォールの設定である。
つまりはIP等に関するポートの設定である。
攻撃者は常にポートスキャンを行っていると考え,不用意なポート開放は避けなければならない。

パスワードログインに関して

オンプレミス型のサーバでは,パスワードログインによる接続も十分にセキュアになりうるが,パブリックネットワークに晒されているクラウドサーバではパスワードログインはセキュリティが甘い。
なぜなら,攻撃者はパスワードをクラックするツールを保持していると考えるべきだからである。

サーバイメージのコピーに関して

AWSのサーバは,インスタンスであるので簡単にマシンイメージのコピーを行うことができる。
便利な機能ではあるが,最新のセキュリティパッチが適用されていないイメージをコピーしてしまう可能性があるため,注意が必要である。

参考サイト

AWSを使っている人が絶対にやっておくべきセキュリティ対策


TODO: 自インスタンスをSSL認証させる

 

PHPのお勉強

2月からWeb業界に転職するつもりなので,PHPの勉強をしている。

基本的にはバスと電車の中で本を読んで,
帰りにコーヒー屋で手を動かしてアウトプットという感じで進めている。

読んでいる本はコレ
一周目が終わって内容を理解したので,アウトプット中。

開発用サーバ: http://52.194.187.169

文法等については後日まとめる。
きちんと寝て,明日に備えよう。
やってきたこと,考えてきたことを出せればいい。

結果はどうあれ,あの日から全力でやってこれた。

以上


ネットワーク関連の勉強内容

今日勉強した内容について走り書き

プログラムのことについて,勉強しようとするとついつい書くのに夢中になってまとめる時間がなくなってしまう。

1時間勉強したら40分は勉強,20分はまとめる時間を取らないとだめだなぁ。

ドメインとか名前解決とか

名前解決

www.nekonisi.comを名前解決しようと思ったら下記の手順になる。

  • Client: nekonisi.comってどこよ? > ルートサーバ
  • ルートサーバ: わからんけど,comのこと知ってんのはコイツら > Client
  • Client: nekonisi.comってどこよ? > comのこと知ってるサーバ
  • comのこと知ってるサーバ: 13.231.122.238やで。 > Client
  • Client: サンガツ

ルートサーバ

DNSの頂点のサーバ。

全部で13クラスタある。

下記で確認できる。

PING *.ROOT-SERVERS.NET

もし,世の中をメチャメチャにしたければ,
この13クラスタを潰せば世界中のインターネットは止まる。

ping A.ROOT-SERVERS.NET



A.ROOT-SERVERS.NET [198.41.0.4]に ping を送信しています 32 バイトのデータ:
198.41.0.4 からの応答: バイト数 =32 時間 =167ms TTL=49
198.41.0.4 からの応答: バイト数 =32 時間 =81ms TTL=49
198.41.0.4 からの応答: バイト数 =32 時間 =71ms TTL=49
198.41.0.4 からの応答: バイト数 =32 時間 =66ms TTL=49



198.41.0.4 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 66ms、最大 = 167ms、平均 = 96ms

TLD(Top Level Domain)

ルートサーバがボスだとしたら,中ボス。
www.nekonisi.comcomの部分。

ルートサーバの次にたらいまわしにされるサーバ。

2LD(2nd Level Domain)

www.nekonisi.comnekonisiの部分。

wwwの必要性

元々は同じドメインでも

HTTP nekonisi.com 192.○.○.○ -> www.nekonisi.com

SMTP nekonisi.com 192.△.△.△-> smtp.nekonisi.com

POP3 nekonisi.com 192.□.□.□-> pop.nekonisi.com

という風に分けていた名残。

以上

host名を設定

IPをいちいち覚えていられないので,
host名を設定する。

  1. vim /etc/hostsで下記の書式に従って設定を追加する。
    1. IPアドレス 任意のhost名

WordPressの新しいエディタ正直使いにくい。

以上

AWSで簡単にwebサイトを

新しくデザインパターンの勉強でもしようかと思って,
Webサイトを作ったので導入方法だけまとめとく

1. lightsailでインスタンスを作成する。

詳細は省略

centosで作った。

2. sshで接続する

ブラウザでも接続できるけど,動きがモッソリしているのでgit-bashで接続した。

  1. アカウントページからpemファイルをダウンロード
  2. 任意の場所に保存(~/.ssh/hoge.pem)
  3. ssh -i ~/.ssh/hoge.pem user@host

3. (L)AMPのインストール

sshで入った後に,

sudo yum install -y httpd

sudo yum install -y mysql-server

sudo yum install -y php

でインストールできる。(mysql-serverはインストールできなかった。)

4. デーモン起動

sudo service httpd start

5. 接続確認

任意のブラウザでhttp://(ホスト名)にアクセスする。

6. 動作確認

サーバ内の/var/www/html/にindex.phpなりindex.htmlなりを作成し,再アクセスする。


今回はgithubのリポジトリから落としてくるように設定した。

7. gitのインストール

サーバ側で,sudo yum -y install git

8. Githubに公開鍵を登録

cd ~/.ssh/

ssh-keygenでEnter連打

cat ~/.ssh/id-rsa.pun

コピった文字列をgithubに登録する。

9. リポジトリをclone

git clone git://github/hogehoge

 

本当にサクッと動くもの作るだけだから,セキュリティとかは保証しない。

以上