ブログ等にソースコードを入力するためにHTML特殊文字を変換してみる – PHP 開発 サンプル

 ブログ等にソースコードやHTMLタグを表示させようとして入れても、HTML特殊文字が評価されてしまって表示が崩れてしまったりする時、対応するために特殊文字をエンコードする必要が出る。
 VPSを持っているなら、簡単なPHPスクリプトを作れば実現できる
実行してみる on さくらのVPS

$code = htmlspecialchars(htmlspecialchars($sourcecode));
echo("<textarea cols=’80’ rows=’40’>{$code}</textarea>");

PHPが提供するhtmlspecialcharsをかけるだけでOK。
1回かけると画面に通常表示なので、2回かけて特殊文字変換された状態の物を表示させる。

(256)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP | コメントをどうぞ

複数カラムの値を別問い合わせの複数カラム結果に基づいて抽出する – 行副問い合わせ MySQL

 プチMySQLメモ

 MySQLで、あるカラム値が別の問い合わせ結果の一覧に含まれているか問い合わせる場合に使うのが副問い合わせ(サブクエリ)

 例えば、商品一覧テーブル items があって、在庫一覧テーブル stock の在庫数量 stock_num が0より多い(在庫がある)商品を検索する場合、共通の商品ID item_id で関連を持っているとすれば

SELECT * FROM items WHERE item_id IN (SELECT item_id FROM stock WHERE stock_num > 0)

 行副問い合わせは、複数カラムを使った副問い合わせ。

 例えば、共通の item_id が無くて、商品名 item_name とメーカー名 item_maker によって管理されている場合には

SELECT * FROM items WHERE ROW(item_maker, item_name) IN (SELECT item_maker, item_name FROM stock WHERE stock_num > 0)

 のようにして、複数カラムによって問い合わせることが出来る。

 なお、副問い合わせは1カラムなので名前に関係ないが、行副問い合わせでは複数のカラムの対応を取るためにカラム名を使うので、主テーブルのカラム名と副問い合わせテーブルのカラム名が異なるときには、カラム AS カラム名(SELECT stock_item_maker AS item_maker, stock_item_name AS item_name FROM stock…の様に)でカラム名を書き換えて対応を取らせる。

※テストケースとして副問い合わせを使っているが、これらのパターンの場合、MySQLでは結合(JOIN)した方が高速である場合が多いのには注意

(1064)

カテゴリー: MySQL | コメントをどうぞ

intレコードの値をランダムに更新してみる – MySQL UPDATE RAND ROUND

プチMySQLメモ

マスターテーブル usershop_id(int) カラムがあって、ユーザの登録店舗を保存しているとする。

店舗再設置に伴い店舗をランダムに振り分ける場合

UPDATE user SET shop_id = ROUND(RAND()*10)

これで、0~10のIDが振られる。 最低値を1にするなら 1+RAND()*9。
MySQLのRAND()関数は、0~1.0の範囲の小数乱数を発生するので、これに10を乗算して0~10.0の範囲にして、ROUND()関数で小数点以下を丸めてint型に適合させる。

(2518)

カテゴリー: MySQL | コメントをどうぞ

マスターレコードの値で関連レコードを更新してみる – MySQL JOIN UPDATE VPS

プチMySQLメモ

マスターテーブル usershop_id カラムがあって、ユーザの登録店舗を保存しているとする。

関連テーブルとして、問い合わせテーブル inquiry にも shop_id を保存して、問い合わせ先の店舗を保存しているとする。

ある時、問合せをユーザの登録店舗で集約する為に、inquiry.shop_iduser.shop_id で更新することにした。

なお、inquiry.user_id カラムによって、 user.id と関連づけられているとすると、この場合の更新文は

UPDATE inquiry LEFT JOIN user ON inquiry.user_id = user.id SET inquiry.shop_id = user.shop_id

でOK。

(141)

カテゴリー: MySQL | コメントをどうぞ

Ablenet VPSを使ってみた – vps ablenet unixbench レビュー

 ServersMan@VPSからの乗り換え先に良いVPSはないかと、色々と探してみて、安いサービスとして、ABLENET:VPSを見つけて試用してみたんだけどこれが凄い。
 凄いっていっても良い意味じゃなく,遅い・・・
 v2プラン(仮想3コア、1GBメモリプラン、月額1480円)を試したんだけど、UnixBench5.1.3のインデックスが、シングルで273、3パラレルで683と言う結果だった。
 3パラレルのインデックスがServersMan Proプランの1シングルと同程度だ。
 procの表示では2.27GHzと出てくるので、相当詰め込んでいる感じがする。
 今回のレビューに併せてさくらのVPSのベンチも取り直したが、以前2200を超えていた4GBプランのサーバが2000を切っていて、徐々に詰め込まれているのかなという感じを受けた。
 次はSaasesとかラピッドVPSでも試してみようか。

(281)

カテゴリー: サーバ設定 | コメントをどうぞ

phpMyAdmin – VPS MySQL 管理 config.inc.php

 MySQLをお手軽に管理するためのツールとして定番のphpMyAdmin。
 remiリポジトリにも入っていて、yum –enablerepo=epel,remi install phpMyAdmin で簡単に導入できる。
 しかし、これの設定ファイルの場所が昔と変わっていてちょっと手間取ったのと、その他のメモ。
 /usr/share/phpMyAdmin にファイルが設置されて、/etc/httpd/conf.d/phpMyAdmin で、Aliasを使って /phpMyAdmin にマッピングされているんだけど、これは美味しくない。
 全てのバーチャルホストの /phpMyAdmin にマップされてしまうのでセキュリティ的に美味しくない。
 なので、/etc/httpd/conf.d/phpMyAdmin を削除して、中身を認証とSSLを入れたバーチャルホストのVirtualHostディレクティブ内に設置する。
 また、マップするアドレス自体も Alias /hogepiyo/phpMyAdmin /usr/share/phpMyAdmin 等のように、わかりにくい場所にマッピングするのも有効だろう。
 設定ファイルの config.inc.php は、/usr/share/phpMyAdmin 直下ではなく、/etc/phpMyAdmin 配下に設置されているので、こちらを編集する。

(478)

カテゴリー: MySQL, サーバ設定 | コメントをどうぞ

sshの認証に鍵ファイルを使う – VPS 管理 ssh 鍵認証 ServersMan@VPS さくらのVPS

 VPSの管理接続sshの認証にID&Passwordではなく、鍵ファイルとID&PassPhraseを使う。
 sshサーバで
ssh-keygen -t rsa
 とか打ち込むと、

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
 ここはEnterで、

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
 で、鍵に設定するパスフレーズを設定する。

 ホームディレクトリの .ssh ディレクトリ下に、id_rsa, id_rsa.pubのファイルが出来る。
 id_rsaが秘密鍵、id_rsa.pubが公開鍵。
 sshでは、sshサーバのユーザホームディレクトリの .ssh/authorized_keys ファイルに公開鍵を入れて、クライアントに秘密鍵を入れる。
 authorized_keys ファイルは複数の鍵を列記出来るので、
cat id_rsa.pub >> authorized_keys
 みたいに、最後に追記する。

 で、id_rsaをクライアントに入れる。
 PuTTYの場合は、秘密鍵を一度PuTTYgenで処理して保存して、PuTTYの接続>SSH>認証>認証のためのプライベートキーファイルに設定してやる。
 さくらのVPSだと、ssh以外の管理接続が出来るけど、ServersMan@VPSを含む一般的なVPSではssh管理になるので、ID/Password認証より強度の強い鍵認証を導入したい。

(371)

カテゴリー: サーバ設定 | コメントをどうぞ