memocon プログラミングのメモや物欲日記、雑記等

PHP:ssh2接続しscopyでファイル送受信

2012年06月26日 08時36分

ホスティング会社のファーストサーバが顧客のデータを削除し復旧できないという大失態をやらかしてから数日が経過し、サイト復旧の速さが日頃からデータのバックアップを取っているかというリスク管理の差で出ている。

ファーストサーバ:6/20に発生した大規模障害に関するお詫びとお知らせ
http://support2.fsv.jp/info/nw20120620_01.html

被害を受けたサイト一覧
http://ict.pken.com/2012/06/first_server_list/

己がバックアップ環境を省みると趣味程度だからとサイトのDB、html共にとっていない事に気が付いた。
現時点のデータが全部消失したら間違いなく再開などしないだろう。

そんなことにならない為にもphpでssh2接続しscopyでバックアップファイルをローカルにコピーする環境を作った際の手順。


CentOSでphpのpecl:ssh2を用意するまでの手順.

pecl, phpizeを使えるようにphp-devel,php-pearをインストール。
libssh2をコンパイルできるようにopenssl-develをインストール。
libssh2を取得してインストール
pecl ssh2を取得してインストール
extentionに追加
apache再起動

phpでSSH接続&scopyでファイル取得

上記でpecl:ssh2が使用できるようになったらssh2関数が使えるようになる。

下はscopyでサーバ上のバックアップファイルをローカルにコピーする例。
処理をサーバ側にしてsendすることも簡単に出来るのでmanual読んで好みのバックアップ環境を構築するのが吉。

コマンドもssh2_execで実行できるのでtarでWebサイトを固めたりDBをダンプして落とすことも可能。

参考:ssh2関数マニュアル
http://jp.php.net/manual/ja/ref.ssh2.php

PHPで1次元バーコード表示(CODE 128)をgnu barcodeで行う

2012年03月13日 01時26分

会社で1次元バーコードを使用したいという依頼が「なるはやで」という文言が添えられてやってきた。

もともと表示するライブラリは使用していたらしいのだがそのライブラリでは
今回表示したいCODE 128という形式は表示できなかったらしい。

Pearには作成できそうなライブラリが入っているっぽいのだが残念ながら会社のサーバでは使用できない。

フリーのライブラリを調べてみると2次元バーコードと違って1次元バーコードのものはあまり見つからない。
というよりフリーでCODE 128をカバーしてて良さそうなものはPHP barcodeしか見つからなかった。

http://www.ashberg.de/php-barcode/

これをフルに動かすためにはgen barcodeとgnu barcodeという2つのコマンドをインストールする必要がある。

gen barcode
http://www.ashberg.de/php-barcode/download/#genbarcode

gnu barcode
http://www.gnu.org/software/barcode/

それぞれソースからインストールしなくてはならない。
インストールはそれぞれのREADMEに記述されている。お馴染みのconfigureとmakeだ。

gen barcodeをコンパイルするためにはgnu barcodeがインストールされている必要がある。
だから順番はgnu barcodeの後にgen barcodeをコンパイルする。

下のパスに2ファイル出来ていれば正常だ。

後はphp-barcodeを解凍してURLパラメータを適せん与えてやればバーコードが生成されるだろう。

参考

日本バーコード
http://www.n-barcode.com/

phpで外部コマンド実行(shell_exec)が上手くいかなかった時のメモ

2012年02月27日 13時54分

社内サーバでmailqを管理する簡易的なWebアプリを作っててはまったのでメモ。

目的

メールの即時配信をやめ、キューに溜めてWeb経由で閲覧・配信・削除をできるようにする。
CentOS / postfix

手順

1)postfixの設定(/etc/postfix/main.cf)に以下を追加してsmtpでの配信を即時配信ではなくメールキューに溜めるように設定。
2)phpでmailqueueの設定一覧を取得

こちらはなんの問題もなく動いた
3)phpでmailqueueにあるメールを削除

こちらはさっぱり動かない。

戻り値も空なのでどうしたものか、、、とりあえず関数をsystemやpassthruに変えてみたけど変化なし。

標準エラー出力が取れていないのではと思い調べてみると後ろに”2>&1″を付けることで標準エラー出力も標準出力に吐き出せるので試してみる。

これでもメッセージは何もでない。
コマンド自体間違っていないか実行したコマンドをechoしてターミナルから実行してみると正常に動作して消せる。

となると権限周りが怪しくなるのでsudoしてみることに。

とやっても何も動かない。
自分しか使っていないローカルマシンなのでセキュリティなど無視して以下に設定してみても駄目。

しかし上記を追加してからエラーメッセージが表示されるようになった。
以下のようなもの。

これでググってみるとvisudoで以下の行をコメントアウトすることにより解決するようだった。

上で見事に解決。
無事にコマンドが実行されメールキューのメールが削除できました。

※自PC内のVMだからやりたい放題やっていますが外部サーバ等の場合はこの記事の内容はセキュリティ上問題が多いのでおすすめしません。