【CentOS7】PHP5.6からPHP7.4へのアップグレード手順
CentOS7でPHPのバージョンアップするときの方法です。
※CentOS8では、yumコマンドに代わる、dnfコマンドになりますので変更点があれば追記します。
PHP7パッケージがインストールできるEPELをインストール
yum install epel-release
リポジトリの追加
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
リポジトリの確認
ls -l /etc/yum.repos.d
インストールできるPHP一覧が確認できます。
今回はPHP7.4をインストールします。(PHP8は正式リリース版でなかったため)
-rw-r--r-- 1 root root 456 Aug 17 19:29 remi-php54.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php70.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php71.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php72.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php73.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php74.repo -rw-r--r-- 1 root root 1314 Aug 17 19:29 remi-php80.repo
PHPと必要なパッケージも一緒にインストール
yum install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-gd php-mysql php-xml php-bcmath
php.confファイルの変更(変更されないこともあるので確認)
※Apacheではない場合不要
vi /etc/httpd/conf.d/php.conf mod_php5.c ↓ mod_php7.c
Webサーバーソフトウェア(Apache/Nginx)を再起動して対応完了です。
再起動をかけるとPHP5.6からPHP7.4に切り替わるのでPHP5.xでしか使えない関数があるとエラーがでるので注意!
※WordPressやライブラリなど使用していた場合、事前にテストサーバーで確認したほうがいいです。(プラグインなどエラーがでる可能性有り)
【Laravel】大量INSERTする際に使う関数(chunk)
INSERT時にテーブルのカラム数が異常なほど多い場合やテキストデータのサイズが大きいと下記のエラーが出ます。
<?php //General error: 1390 Prepared statement contains too many placeholders ?>
調べてみると、Laravelに何回か分けてINSERTできる関数があるそうでそれが「chunk」というものだそうです。
500件ずつデータを追加する場合
<?php //サンプルの配列は1つですが、$inserts配列に1000個以上あるのと過程します。 $inserts[] = array('id'=>’1’,'name'=>'テスト'); $insert_data = collect($inserts); foreach ($insert_data->chunk(500) as $chunk) { DB::table('sample')->insert( $chunk->toArray()); } ?>
【CentOS】SSHの不正アクセスをBANするFail2banの設定
SSHからの不正アクセスを監視するFail2banの設定手順になります。
ほぼ海外からの総当たり攻撃なので、随時SSHの接続ログを確認して不正アクセスがないか確認しましょう。
※あまりにも多い場合、契約した先に確認し報告することをおすすめします。
不正アクセスがないかログから確認
less /var/log/secure
Fail2banのインストールと設定手順
yum install fail2ban
vi /etc/fail2ban/fail2ban.local
[Definition]
loglevel = NOTICE
vi /etc/fail2ban/jail.local
[DEFAULT] # 1時間以内に5回不審なアクセスがあったら1日BAN bantime = 86400 findtime = 3600 maxretry = 5 #CentOS7の場合systemd backend = systemd # SSHのアクセスに対する設定 [sshd] enabled = true banaction = firewallcmd-ipset
攻撃側にエラーメッセージを返さないように
vi /etc/fail2ban/action.d/iptables-common.conf
blocktype = DROP
fail2ban起動と確認コマンド
# 起動コマンド systemctl start fail2ban # 停止コマンド systemctl stop fail2ban # 自動起動を有効 systemctl enable fail2ban # 自動起動の確認 systemctl is-enabled fail2ban #現在のBAN状況 fail2ban-client status sshd
参考サイト様
【Laravel】PDO(mysql)を使ったSQL操作
Laravel版のPDOを紹介。
最初は使い方がわからず戸惑いましたが、今はページ送りやGET/POST関連の操作が気軽に実装できて重宝しています。
1件だけデータを取得
<?php $sample = $DB::table('テーブル名')->where('id',1)->first(); // IDを表示 echo $sample->id; ?>
あいまい検索(sampleという名前がつくものすべてを検索)
<?php $sample = $DB::table('テーブル名')->where('name','like','%sample%')->first(); // IDを表示 echo $sample->name; ?>
名前がNULLになっている番号を検索
<?php $sample = $DB::table('テーブル名')->whereNull('name')->first(); // IDを表示 echo $sample->id; ?>
名前がNOT NULLの番号を検索
<?php $sample = $DB::table('テーブル名')->whereNotNull('name')->first(); // IDを表示 echo $sample->id; ?>
複数のデータを取得
<?php $samples = $DB::table('テーブル名')->get(); if( isset($samples) && count($samples)>=1){ // あるだけIDを表示 foreach( $samples as $row ){ echo $sample->id; } } ?>
ページ送り付きで検索
<?php // Contoroller内で定義 // samplesview.bladeというファイルがあることを前提 $limit = 30; $samples = $DB::table('テーブル名')->paginate($limit); return view('samplesview',compact('samples')); // samplesview.blade内で定義 // ページ送りを表示 {{ $samples->render(); }} //検索したinputデータを引き継ぎしたい場合 {{ $samples->appends('id', @$inputs['id'])->render(); }} ?>
OFFSETとLIMITの指定
<?php $samples = $DB::table('テーブル名')->offset(0)->limit(5)->get(); if( isset($samples) && count($samples)>=1){ // あるだけIDを表示 foreach( $samples as $row ){ echo $sample->id; } } ?>
データ編集系(トランザクション込み)
<?php // データの追加 DB::beginTransaction(); try { $DB::table('テーブル名')->insert(array('id'=>1)); $id = DB::getPdo()->lastInsertId(); //新規追加したIDを取得 DB::commit(); } catch( \exception $e ) { DB::rollback(); } // データ更新 DB::beginTransaction(); try { $DB::table('テーブル名')->where('id',1)->update(array('name'=>'samplename')); DB::commit(); } catch( \exception $e ) { DB::rollback(); } // データ削除 DB::beginTransaction(); try { $DB::table('テーブル名')->where('id',1)->delete(); DB::commit(); } catch( \exception $e ) { DB::rollback(); } ?>
Let’s Encrypt(レッツエンクリプト)でワイルドカードを設定する方法
#「ドメイン名」は設定するドメインに変更 #「*」はワイルドカード指定 #「メールアドレス」こちらも自前のアドレスに変更 ./certbot-auto certonly --manual -d 「*.ドメイン名」 -m 「メールアドレス」 --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
上記のコマンドを流すと、TXTレコードにドメインと、認証コードを設定してくださいと案内が表示されますので、レジストラにて設定します。
↑(認証コードは、コマンドを流すたびに変更されるため、浸透されるまでそのまま放置)
ムームードメインだと下記の記述になります。
サブドメイン | 種別 | 内容 |
---|---|---|
_acme-challenge | TXT | 認証コード |
即時反映されないため、下記のコマンドで確認します。
#「ドメイン名」は確認するドメインに変更 nslookup -q=txt _acme-challenge.「ドメイン名」
下記の内容が表示されれば、浸透したことになります。
※浸透に時間かかる場合もあるため、何回か試すことをおすすめします。
Non-authoritative answer: _acme-challenge.「設定したドメイン」 text = 「設定した認証コード」
確認出来た後、認証コードが表示された画面で放置したのを進めることで、証明書が発行されます。