趣味のプログラム工房

php、cgi作成メモ

wiki 作成

自前のwikiを作ってみた。
採用したのは、dokuwikiというphpのソフト。
専用のデータベースとか用意しなくていいので、インストールは比較的すんなり。

テンプレートは結局、標準のを利用。
プラグインとして
htmlok plugin:HTMLタグを書ける
smtp plugin:メールを送る設定ができる
XBR Plugin:改行が楽!
Access Counter and Popularity Plugin:アクセスカウンター


2023年06月17日


mysqlで文字コードハマり

AWSのEC2にmysqlをインストールして、phpMyAdminを設定して使えるようにして、
早速テーブルを作ったのはいいけどデフォルトの文字コードが、「latin1_swedish_ci」になっていたため、文字コード・・・照合順序を「utf8_general_ci」に変更。

これがわかるまで、、、、通りで文字化けするわけですよ。
2017年08月27日


UPnP ControlPoint(コントロールポイント) WEBインターフェース

LinuxマシンにてPT2で録画サーバ、MiniDLNAにてメディアサーバを立てたのですが、これを簡単にTVに出力する方法はないかということで、
WEBインタフェース作ってみました。
(というか、意外とこういうソフトってないんですね。。。)

Perlで「Net::UPnP」というライブラリが見つかったので、それを使って作成しました。
本当はPHPのほうがよかったのですが、使えるライブラリがなかったので断念。
gupnpというのが見つかりはしたのですが、インストールができなかった。


PerlのNet::UPnPを使えばそれなりに苦労せず目的は達成できましたが、
もうちょっと使いやすくなるとうれしい。
毎回毎回、「Net::UPnP::ControlPoint」の「search」でUPnPデバイスを取得しないといけないのは正直パフォーマンスが悪いです。
ページ遷移が発生するたびにこれでは、時間がかかりちょっとイラッとする。
ネットで検索した例だと↓のようなものばかりですが、

$upnp->search(st => 'upnp:rootdevice', mx => 3);

そのほか、オプションとして、hostでIPアドレスやIP:ポートが指定できるようです。
参考:http://nazuna.sakura.ne.jp/software/upnp/get_device.html


ちなみに、UPnPのサービス名やパラメータを調べるのに、
Linuxに入っていた「GUPnPユニバーサルコントロールポイント」が大変便利でした。

2015年02月24日


PHP mb_strimwidthで文字化け!

「ウェブでワイン管理」
http://wine-cellar.sites-mall.com/
のページでいつの間にか文字化けが発生するようになっていたので、そろそろ直そうかと。

てっきりDBとのなにかしらの絡みで発生しているのかと思ったら、phpの「mb_strimwidth」関数が原因でした。
mb_strimwidthの引数に文字コードを渡してあげれば解決です。
$str = mb_strimwidth($str, 0, 10, \"…\", utf8);


で、DB(mysql)とのインタフェースでは、
mysql_query(\'set character set utf8\');
を指定すると文字化けが発生しなくなるのですが、最近は、この方法も非推奨らしく、今は、
$db->set_charset(\'utf8\');
で設定するらしいです。

私は、mysql_queryを使ってるけど、めんどくさいからそのままー
2013年11月24日


Perl用エディタについて

Perlのコーディング用エディタについてですが、ズバリお勧めは、「改造版JmEditor2」でしょう。

以前、エディタから直接Perlスクリプトが実行できるものがほしく、導入したのですが、かなり使い勝手がよく気に入っています。
エディタからスクリプトが実行できるのもいいですが、左側のパネルでお気に入り(ファイル)の管理ができるのがいいです。
私の場合、編集するスクリプト(使うスクリプト)はほぼ固定なので、かなり便利です。
スクリプトの出力ファイルとかを登録しておくのもすぐ結果をみれて便利です。


マジおすすめ。
2013年01月07日


IIS7.5でPerlを実行【Windows2008R2】

大人の事情で、IIS+Perlの環境でプログラムを動かすことになりました。
そのための検証を行ったのですが、意外にメンドクサイ。


IISのインストールは、ISAPI拡張だけあればよさそう。
CGIはおそらく不要です。(必要ならインストールして)


続いて、ActivePerlのインストールですが、64bitOSであっても32bit版のほうがよさそうです。


インストールが完了したら、あとはIISPerlのマッピング。

『ハンドラーマッピング』の設定から、スクリプトマップの追加を行います。
そこで拡張子「*.cgi」にたいし、「perlis.dll」(デフォルトのままだと、C:\perl\binの下にある)を指定します。
ここで、perl.exeは指定しないこと!

マッピングが追加できたら、念のため、「機能のアクセス許可の編集」を選び、実行にチャックが入っていることを確認。


これで、Perlが使えるようなっているはずです。

ただし、注意点として、どうもIISが出力するヘッダがおかしいらしく、perlスクリプトに手を入れる必要があります。

具体的にはヘッダの出力前に、下記の文字列を返す必要があります。何故か。
print "HTTP/1.1 200 OK\n";


この修正が面倒な場合、マッピングとして「perl.exe」を使う方法もありますが、こちらの場合、スクリプト内で呼んでいるライブラリやデータファイルなどのパスを絶対パスで書く必要あります。
おそらく、ヘッダ出力の書き換えより影響範囲が広いと思われるため、私としては、perlis.dllを使うのがお勧め。

あと、perlEx30.dllを使う方法もありますが、こちらも、パスがうまく通らないっぽいです。
2012年09月14日


Cache::SizeAwareFileCacheについて(3) キャッシュ実装で高負荷

キャッシュを使い始めたらキャッシュを探す処理でかなりの負荷が掛かっているらしく余計遅くなってしまいましたorz
ということで、キャッシュサイズの調整が必要です。大きければいいわけでもないらしいです。

と、思っていたのですが、どうやら別の可能性が出てきました。
Cache::FileCacheにはキャッシュの生存時間を制限する機能(default_expires_inで指定した時間)があるのですが、期限の切れたキャッシュを削除するメソッドとして Purge()があります。
どうやらこのPurge()メソッドを毎回動かしていたのが高負荷の原因の可能性が高いです。
また、max_sizeの指定についても負荷が高いらしく、より、負荷を下げたいのであれば、max_sizeは指定せずに、定期的にlimit_size()メソッドを使用するのがいいみたいです。
(max_sizeを指定するとキャッシュを使用する度にlimit_sizeメソッドを実行するようなものなので指定しない方が低負荷なのは当たり前ということですね。)
2011年03月21日


Cache::SizeAwareFileCacheについて(2) xreaで利用

Cache::SizeAwareFileCacheを使おうと思ったのですが、私の使っているXreaサーバでは残念ながらモジュールが入っていないようです。
そこで、自前でperlのモジュール(pmファイル)をダウンロードしてきてxreaサーバにアップロード。

activeperlの場合
ppm install Cache::FileCache
でローカルにインストールできます。
インストールされたモジュールは、perlのインストールフォルダの下\site\libにあります。(Cacheフォルダ)
該当のフォルダをサーバへアップロードします。


アップロードしたモジュールを使うには
xreaの場合の例
use lib qw(/virtual/ユーザID/public_html/module);
とします。(moduleフォルダの下にCacheモジュールを入れた場合)
あとはモジュールをuseすればOK
これで使えるはずです。

2011年03月21日


Cache::SizeAwareFileCacheについて(1)

楽天ウェブサービスのレスポンスキャッシュするためにCache::SizeAwareFileCacheを使用し始めました。
Cache::SizeAwareFileCacheはCache::FileCacheの拡張版でキャッシュサイズの制限をかけることが出来ます。
通常のCache::FileCacheは時間だけ。

使用例
use Cache::SizeAwareFileCache;
my $cache = new Cache::SizeAwareFileCache({
'namespace' => 'MyNamespace',
'default_expires_in' => 60*60*6,#6時間
'max_size' => 10000,'cache_root' => 'res_cache'
});

cache_rootフォルダの中にnamespaceフォルダを作ってその中にキャッシュが保存されます。

2011年03月21日


UTF-8で書いたperlが動かない。500エラー

メモ帳などでUTF-8でPerlのプログラムを作り、FFFTPでアスキーモード・無変換でアップしてもプログラムが動かない。
どうやら、仕様らしい。

調べてみると、メモ帳でUTF-8で保存するとBOMというフラグがついてしまうみたいです。
そのため、うまく動かないらしい。
メモ帳だけでなく、他のソフトでも動かないことも多々あるので他にもいろいろと原因があるきもしますが…
とりあえず、確実に動かす方法としては「文字コード変換ツール」を使います。
これで、UTF-8のBOM無しに変換してからアップすればプログラムにエラーがなければ動くはずです。
Unix系だとnkfというツールがある。
2011年03月21日


次へ