PG WORKS

PHPやLinuxサーバなどのノウハウや、便利なツールを紹介していきます。

【PHP】気軽に使える正規表現チェッカー

正規表現を使うとき何度かサンプルを作りテストすると思いますが、プログラムを何度か修正するのが手間なので
Webで公開されている正規表現チェッカーをよく使います。

php-regexp.a-zumi.net

PHPの記述そのまま使えるので便利なツールです。

正規表現ではないですが、こちらもオススメなツールです。

codic.jp

変数の名前に困ったときに、日本語を入力すると英語で記載された名前になるためオススメです。

【ヒストリー】プログラムができないのにプログラマーになった人生

私自身、まともにプログラムを組むことができなかった時期が長かったので、できなかったときの思い出と、出来るようになったきっかけをブログに書き留めたいと思います。

専門学校でプログラムを学び、プログラムの世界に飛び込んでいったのですが、何を学んでも理解ができなくて、嫌になった時期がありました。

先輩に頼るしかなかった時期

先輩に「どこがわからないの?」と聞かれるのですが、何をどう説明したらいいのか、わからない。。。わからなさすぎて「いや・・・・すいません。」の言葉しかでませんでした。

このときの技量は、サンプルを少し改良する程度のことはできるものの、サンプルを応用したり、自分でアルゴリズムを考えて作ることができませんでした。

期限に間に合わせるために必死になる

納期に間に合わせるために、先輩に迷惑かけながらもやっていくのですが、できない自分に対してのストレスを感じてました。

なんのためにこの仕事をやろうと思ったのかな・・・もっとまじめに勉強してしていれば・・・などマイナス思考なことしか思い浮かばず、どん底まで落ち込みました。

なんでだろう・・・なんでできないの・・・

あるとき、その時勤めていた会社の社長から、きつい一言を言われました。(今だとパワハラ



「君ね。問題外だから、このままだと辞めてもらうことになるよ」



もうね。「ハハ・・・」って感じでしたよ・・・

ダメかなと思ったときに・・・

f:id:zen6a:20150826235217j:plain

あるゲームを作ることになったときに、どうしてもうまく組めなくて悩んでました。

いつも帰り道に、一から仕組みを見直し、どうやったらうまく動かせるのか、頭の中で想像していたその時。

たくさんの花が一斉に咲くように、悩みが解消していく考えができるようになりました。
(ランチの帰りに、ひらめいた記憶がいまだに覚えてる。。。)

徐々にプログラムが理解できるようになった

それ以降は、他のプログラムでも組めるようになり、今の自分があるわけですが、あのひらめきがなければ、プログラマーという道は諦めてたかと思います。

苦しもがきながらも、続けきったからこそ、ひらめいた出来事だったのかもしれません。

【PHP】JpCarbonで祝日判定

前にCarbonを使った日付処理を公開しました。

zen6a.hateblo.jp

仕事で祝日を判定する処理が必要なり調べたところ、Composerで「JpCarbon」という祝日を判定できる記事を見つけました。

enomotodev.hatenablog.com

祝日を判定し祝日であれば、何の祝日なのか表示する

require 'home/○○○/bin/vendor/autoload.php';

use Carbon\Carbon;
use JpCarbon\JpCarbon;

$dt = new Carbon('2018-12-23');
$st = JpCarbon::createFromDate($dt->year, $dt->month, $dt->day)->holiday;

echo $st;

祝日でなければ結果は何も表示されません。

【CentOS7】firewallでポート制御しよう

Apacheサーバーをロードバランサーを使って負荷分散をした際に「memcached」利用することになりました。

memcachedはセキュリティの関係上、IP制限を設定しないといけないためその設定方法をメモ。

memcached のアクセス制御に関する注意喚起

ポートの許可

firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --add-service=mysql --zone=public --permanent

特定のIPだけを許可

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="許可するIPアドレス" port protocol="tcp" port="11211" accept"

↑「11211」はmemcachedのポートです。

設定完了後、下記の反映コマンドを実行することでポート制限が有効になります。

firewallの設定を反映

firewall-cmd --reload

firewallの設定を確認

firewall-cmd --list-all-zones

firewallの起動/停止/確認

service firewalld start
service firewalld stop
service firewalld status

firewall自動起動の有効・無効設定

#有効
systemctl enable firewalld

#無効
systemctl disable firewalld

memcachedがIP制限が複数できないため、firewallを使うことになりました。

設定が難しいイメージがあったので避けていましたが、想像してたよりも簡単にできたので、これを機に覚えていきたいと思います。

Apache2.4でのWebアクセス制御

とある事情で国内のみのアクセス制限することになり、下記のサイトからIPリストを取得

www.cgis.biz

早速「.htaccess」で設定したら、サイトが落ちかけました。。。

.htaccess」はアクセスがあるたびに設定内容を読み込むため、国内のIPリストを4000行書くと、サーバーが応答不能になるほど重くなります。

CentOS7標準の「firewall」で設定しようと思いましたが、検索エンジンを回避方法がわからず。。。
※ユーザーエージェントで回避するみたいですが、設定がよくわからなひ(汗

vhost.conf

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /example
    ServerName example.com
    <Directory "/example">
       Options FollowSymLinks
       AllowOverride All
       Include /etc/httpd/conf.d/iplist
    </Directory>
</VirtualHost>

バーチャルホストの設定を「/etc/httpd/conf.d/vhost.conf」に書いています。

「example」というフォルダが対象(サンプルなので各自の設定に書き換えてください。

4000行もipを書くため別ファイルに分けました。

iplist

SetEnvIf User-Agent "Googlebot" bok
SetEnvIf User-Agent "Slurp" bok
SetEnvIf User-Agent "msnbot" bok
SetEnvIf User-Agent "bingbot" bok
<RequireAny>
Require all denied
Require env bok
Require ip 1.0.16.0/20
Require ip 1.0.64.0/18
Require ip 1.1.64.0/18
#
#続きのipをここに記載
#
</RequireAny>

設定エラーがでないか「configtest」で確認

service httpd configtest


Syntax OK

と表示されれば問題ないので、Apacheを再起動させます。

service httpd restart

サイトが落とせないのであれば、下記のコマンドで反映できます。

service httpd graceful