Smartyでループ内のindexを得る

Smartyのループの中で、現在何番目の処理かを知りたいときなどは、「index」プロパティを使用します。

 

例)リスト10件おきに広告を表示したいとき

 

参考URL)

GROUP BYしたカラム以外のカラムで優先順位を決める方法

GROUP BY で指定したカラムの値が、同じ値の行はグループ化されるが、GROUP BY で指定していないカラムの値は、どの行の値を優先させるか、通常は決めることができない。

例えば、下記のようなSQLだと、得られるidの優先順位は指定できない。(実際、昇順で最初のものがくる場合が多いが、保証はされない)

 

この場合は、副問い合わせで対応するのが一般的なやり方らしい。

 

ちなみにWHERE句で絞る場合も、副問い合わせの中で絞らないとダメ。なので、下記の場合は失敗する。

 

参考サイト)

ブラウザで拡大表示したときの画像が右側に寄ってしまう現象の修正

比較的横幅の広い、中央寄せしている画像をサイトに掲載している場合、ホイールスクロールなどでサイトを拡大していくと、画像の幅が画面からはみだしたところで、画像が左端が画面の左端に合った状態で拡大されてしまう。

したがって、PCモニタの解像度によっては、デフォルト縮尺の状態でも、画像が中央から右にずれたような表示となってしまう。

この場合は、leftプロパティとネガティブマージンで対応する。

(imgがブロック要素であればimgの方に指定してもよろしいかと思う。)

 

動作確認ブラウザ

  • chrome 61.0.3163.100
  • Firefox 56.0.1(64bit) 他

 

参考サイト)

 

特定の名前のファイルを再帰的に削除する

ファイル検索でよく使われるfindと併用するといいらしい。

 

WindowsのローカルからLinuxのリモートにSCPしたときに、余計な「desktop.ini」が一緒にアップされちゃったときとか。

 

 

sshd_configによる接続制限

接続元のIP制限を行うとき、一番お手軽なのはやはりTcpWrapperによる制限

しかしこれだとTCPレベルで一括制限され、ユーザ別の判定はできないので、ユーザ別やグループ別に制限したいときはsshdで制限するのがよろしいかと。

1.sshd_configを編集

2.sshd再起動

以上。

 

参考URL)

 

TcpWrapperによるSSHのIP制限

・環境はCentOS5.5および7.2

1.設定ファイルバックアップ

2.許可する接続元を指定

“hosts.allow”に許可する接続元を指定。”hosts.deny”で全接続を拒否。

3.許可されていない接続元から接続できないことを確認

OK.

 

参考URL)

SSHのIPアクセス制限 まとめ

 

社内用プロキシサーバの作成

複数のサーバを運用している場合、それぞれのサーバにどこからでも接続できる状態だと、セキュリティやスタッフ管理の面でよろしくないので、プロキシサーバを使用してセキュリティを高める。

 

1.プロキシ用サーバ作成

まずプロキシ用のバーチャルサーバを立ち上げ、NICや必要なIP(最低限グローバルとローカル1つずつ)を割り当てる。
やり方については各ベンダーでマニュアルなど用意していると思うので割愛する。

なおスペックについては、SSHトンネルするだけなので、最低限のリソースでOKかと思う。
今回はCentOS7.2 Xen 64bitを使用した。

 

2.ユーザ作成

弊社の場合は某社のクラウドなので最初はVPN接続してログインユーザ作成

ちなみにAWSであればec2-userなどで最初からログインできるので上記は不要

 

3.rootログイン禁止

使いやすいPuttyやPoderosaなどのSSHクライアントで接続

・sshのrootログイン禁止

 

4. ファイアウォールの設定

今回はポート10022(ssh用)だけを許可する。

やり方はこちらを参照。

 

5. sshのポート番号変更

攻撃回避のためssh用のポートを22から10022に変更する。

やり方はこちらを参照。

 

6. 不要サービスの停止

・必要最低限のサービスだけで動かしたいので不要なものは停止する。

判断はこちらとほぼ同じ
違いはcron停止、firewalld残し。

・SELinuxも無効に

 

7. スタティックルーティングの設定

弊社の場合ローカルネットワークのセグメントがもう1つあり、そちらのセグメント(172.18.0.0/16)にも接続できるようにするためスタティックルーティングの設定を行う。

・ローカルネットワークのデフォルトルーティング設定ファイルを無効化(デバイス名をeth1とした場合)

⇒ No such file or directoryとなっても、もともと無いのでそのままでOK

・別セグメント(172.18.0.0/16)へのルート設定追加

・ネットワーク再起動

(service network restartでも一応いける)

ちなみにCentOS7から採用されたnmcliで行うときは、

のようなコマンドを打つが、ベンダーの仕様の関係なのか、eth1もeno1もnmcliでは認識されていなかった。
ただNetworkManagerは動いてるのでipコマンドは通る。昔の名前(eth**)でデバイス名が認識されていた。
やり方あるのかもしれんがネットワークは疎通してるのでまあいいか。

nmtuiで行う方法もあるらしいが、TUI画面は起動したがなぜかうまく動かなかった、、、。

・ルート確認

ちなみにベンダー側のコンソールでネットワークの再構築を行うとどうなるか。
→案の定スタティックルーティングの設定が初期化された
→ネットワーク再構築をしたら、再度スタティックルートの設定を行う必要あり。

・疎通確認

OK。

 

以上で基本的なプロキシ構成は完了。

プロキシを使用するスタッフ数分、useraddしてユーザを作成し、それぞれ接続して使用する。
あとは必要に応じて鍵認証にしたり、IP制限したり、トンネルするときのやり方を社内で決めてあげればOK。

スタッフが辞めた場合は、userdelしてそのスタッフ用のユーザを削除してやればOK。

 

参考URL)

 

CentOS7にmysqlインストール

1.mariaDBの削除

CentOS7にはデフォルトで競合するmariaDBが入っているので削除する

・mariaDBのインストール確認

・mariaDBとデータ削除

 

2.MySQL5.7のインストール

・公式リポジトリ追加

本記事執筆時では、mysql57-community-release-el7-11.noarch.rpmが最新 のよう。

・インストール

・確認する

・自動起動設定

・起動する

 

3.mysqlに入る

・初期パスワード確認

・******の部分がパスワード。このパスワードを使って入る。

・SQL発行の前に、新しいパスワードを設定する必要があるので設定する。

・ちなみにパスワードの強度が低いと怒られて変更できない。

・SQL発行テスト

これでOK。

 

参考URL)

 

MySQLで最後にINSERTしたAutoIncrementのidを取得する

生のSQLで取得する場合は、

で取得できます。

DBIを使用している場合は、以下のようにステートメントハンドルから取得できます。

 

参考URL)

 

CentOS7でSSHのポート変更

  • 現在の状態を確認

  • sshd_configの修正

  • sshd再起動

  • firewalldの設定からSSHを削除

  • firewalldの設定にssh-10022を追加

既存のssh.xmlをコピーしてssh-10022.xmlを作成する

ssh-10022.xmlファイル内のポート番号を22から10022に変更する

ファイアウォール設定に追加

 

  • firewalldをリロード

  • 変更後の状態を確認

 

参考URL)