今書いているスクリプトのファイルロック機構を作る上で、ファイル名・パスを一意で取得する必要があったためサブルーチンを作り始めたら、ちょっと横道に逸れたけど役に立ったのでメモ。
個人的にスクリプト内部ではファイルをopenしたりする際には絶対パスを指定するのがよいと思います。ここでいう絶対パスというのは、"/"で始まり、"./"や"../"を含まないパスのこと。正規化というらしい。
で、ユーザが入力した値(ユーザIDとかファイルナンバーとか)に基づいてファイルを扱う際に気をつけなければいけないのが、ディレクトリ・トラバーサル(cf.Wikipedia)です。ユーザから入力された値をチェックするのはまあ当然ですが、ファイルを取り扱う直前にもチェックを入れておきたいものです。
【続きあり】
2012年01月13日
2012年01月11日
PATH_INFOと%2Fの関係
CGIを呼び出す際、昔はパラメータをhttp://example.com/hoge.cgi?user=tom&key=valueと、?と&で繋げるのが常識だったわけですが、SEO的にサーチエンジンにも好まれないということでhttp://example.com/hoge/tom/valueといったあたかもディレクトリ構造であるかの様な表記が出てきました。(たぶんAmazonが先駆者だと思う)
さて、http://example.com/hoge/tom/valueだとちょっとスクリプトがどこかわかりづらいので、http://example.com/hoge.cgi/tom/valueを例にとりましょう。"hoge.cgi"以降の情報を取得するには、$ENV{'PATH_INFO'}を使います。
これをパラメータとして取得するには、頭の/を落として、/でsplitしてやればいいわけです。
【続きがあります】
さて、http://example.com/hoge/tom/valueだとちょっとスクリプトがどこかわかりづらいので、http://example.com/hoge.cgi/tom/valueを例にとりましょう。"hoge.cgi"以降の情報を取得するには、$ENV{'PATH_INFO'}を使います。
#Script1
print $ENV{'PATH_INFO'};
【結果】/tom/value
これをパラメータとして取得するには、頭の/を落として、/でsplitしてやればいいわけです。
#Script2
my $param = $ENV{'PATH_INFO'};
$param =~ s/^\///;
my @data = split('/',$param);
print join('&',@data);
【結果】tom&value
【続きがあります】
リファレンスされた配列の最後の添え字の取得
ちょっとググり方が悪かったのか、すでに常識なのかはわからないけど、試行錯誤して解決したのでメモ。
Perlにおいて配列の最後の添え字(番号)を取得するには、$#配列名(例:$#array)であることは基本中の基本です。
では、リファレンスに入っている配列の最終番号を取得するにはどうしたらいいのか。
解法1:scalar関数を使う
解法2:$#でがんばる
解法2の方がわかりやすいというかシンプルというか好み。
(区切りに{}が使えることを知らんかったよ・・・)
ちなみにこんな複雑なことも可能
Perlにおいて配列の最後の添え字(番号)を取得するには、$#配列名(例:$#array)であることは基本中の基本です。
では、リファレンスに入っている配列の最終番号を取得するにはどうしたらいいのか。
解法1:scalar関数を使う
my $lastnum = scalar(@$ref_array) -1;
解法2:$#でがんばる
my $lastnum = $#{$ref_array};解法2の方がわかりやすいというかシンプルというか好み。
(区切りに{}が使えることを知らんかったよ・・・)
ちなみにこんな複雑なことも可能
my $lastnum = $#{$hash{'list'}};
# %hashの'list'の値に配列へのリファレンスが入っている場合
2012年01月10日
/usr/bin/perl^M: bad interprete
今日新しいプログラムの開発に取りかかったところ、シェル上で
というエラーが。
Apacheのエラーログにも
とエラーが吐かれています。
/usr/bin/perlはちゃんとあるし、パーミッションも実行可能になっている・・・しかも他のスクリプトはちゃんと動いているのになぜか、と思っていましたが、
改行コードがCR+LFになっていました。改行コードをLFで保存し直してちゃんと動きました。
久々にイチから書き始めたとはいえ、基本的なところでした。
bad interpreterが出たら、まずは改行コードを疑ってみよう。(特にDOS(Windows)で書いてLinuxで実行している場合)
# ちなみにprova.cgiというのは、今新しく作っているプログラムです。
# ティロ・フィナーレと同じくイタリア語です。
# 英語でいうとtestですね。まあ、そういうコンセプトのプログラム
-bash: ./prova.cgi: /usr/bin/perl^M: bad interpreter: そのようなファイルやディレクトリはありません
というエラーが。
Apacheのエラーログにも
(2)No such file or directory: exec of '/hoge/prova.cgi' failed
とエラーが吐かれています。
/usr/bin/perlはちゃんとあるし、パーミッションも実行可能になっている・・・しかも他のスクリプトはちゃんと動いているのになぜか、と思っていましたが、
改行コードがCR+LFになっていました。改行コードをLFで保存し直してちゃんと動きました。
久々にイチから書き始めたとはいえ、基本的なところでした。
bad interpreterが出たら、まずは改行コードを疑ってみよう。(特にDOS(Windows)で書いてLinuxで実行している場合)
# ちなみにprova.cgiというのは、今新しく作っているプログラムです。
# ティロ・フィナーレと同じくイタリア語です。
# 英語でいうとtestですね。まあ、そういうコンセプトのプログラム
2012年01月05日
スタードメインで.atを割引中
SSL証明書の取得でお世話になっているネットオウルが提供するドメイン取得サイト、スタードメイン
で2012年1月31日18:00まで、各種ドメインを割り引き登録できます。
今回の目玉は.at(オーストリア)の新規登録が680円でできることです。.atについては、前置詞の"at"や、@を連想させるとうことで、ccTLDではtoに次いで使いやすいと思います。そして、gTLDや.jpなどでは空いていないメジャーな名前も登録できる可能性があります。
私のプライベートメールアドレスは、「名@姓.at」ですが、.jpは言うに及ばずgTLDはダメだったものの、.atが空いていましたのでバリュードメインで登録して使っています。今回、残念ながら移管や更新は割引の対象外ですが、これから家族のアドレスがほしいという人は登録を考えてみてもいいのではないでしょうか。
ちなみに、私はバリュードメイン提供のDNSサーバを利用し、GoogleAppsで管理していますが、スタードメイン
でしたらDNSサーバに加えてメール転送が100個まで無料でついてきます。ついでに、10GB or 3GB+SQLのウェブサーバもついてきます。バリュードメインは4,430円(2012年1月5日現在)ですので、通常料金でも安いのです。atドメインの移管には対応していないようなのが悔やまれますが、他のドメインもバリュードメインよりも微妙に安いので、新たに取得する分はこっちで取ろうかとも思います。(移管の手間をかけるほどではないかな)
今回の目玉は.at(オーストリア)の新規登録が680円でできることです。.atについては、前置詞の"at"や、@を連想させるとうことで、ccTLDではtoに次いで使いやすいと思います。そして、gTLDや.jpなどでは空いていないメジャーな名前も登録できる可能性があります。
私のプライベートメールアドレスは、「名@姓.at」ですが、.jpは言うに及ばずgTLDはダメだったものの、.atが空いていましたのでバリュードメインで登録して使っています。今回、残念ながら移管や更新は割引の対象外ですが、これから家族のアドレスがほしいという人は登録を考えてみてもいいのではないでしょうか。
ちなみに、私はバリュードメイン提供のDNSサーバを利用し、GoogleAppsで管理していますが、スタードメイン
2011年12月23日
【緊急】掲示板レンタルの停止について
cgi-bin.jpにてレンタルしている掲示板レンタル3種につきまして、管理上の問題が発生したため緊急にサービスの停止をさせていただきました。
【現象】
広告を提供している会社より不適切なコンテンツが掲載されているとの指摘があり、メンテナンスを行おうとしたところ、全ての掲示板のログが消えた。
【原因】
管理プログラムが古いサーバにしか対応しておらず、全ての掲示板を「更新期限切れ」として判断したため削除の対象となってしまった。
【対応】
ファイルが削除されているためログを復活させることはできず、また他の異常が発生する可能性もあるため、掲示板レンタルの提供を停止させていただきました。
今後、コードをチェックの上再提供させていただきますが、その際には新規に作成が必要になります。また、今回広告提供会社より指摘があった原因となっているスパム投稿についても、それを抑制する手段を備えた上での再開とさせていただきます。
【ご注意】
他のサービスにつきましても、順次コードのチェック・更新をしていきます。それに伴い、サービスの一時停止、データの消失が発生する可能性がございます。
この度は、掲示板をご利用できなくなりましたこと、誠に申し訳なく思います。
今回の事態は掲示板レンタルのプログラムが、技術的・社会的情勢に追いついていないことを放置したことにより発生したものと認識しております。掲示板をご利用いただいておりました皆様には、ただ平謝りする他ございませんが、何卒ご理解をいただきたく、お願い申し上げます。(追記あり)
【現象】
広告を提供している会社より不適切なコンテンツが掲載されているとの指摘があり、メンテナンスを行おうとしたところ、全ての掲示板のログが消えた。
【原因】
管理プログラムが古いサーバにしか対応しておらず、全ての掲示板を「更新期限切れ」として判断したため削除の対象となってしまった。
【対応】
ファイルが削除されているためログを復活させることはできず、また他の異常が発生する可能性もあるため、掲示板レンタルの提供を停止させていただきました。
今後、コードをチェックの上再提供させていただきますが、その際には新規に作成が必要になります。また、今回広告提供会社より指摘があった原因となっているスパム投稿についても、それを抑制する手段を備えた上での再開とさせていただきます。
【ご注意】
他のサービスにつきましても、順次コードのチェック・更新をしていきます。それに伴い、サービスの一時停止、データの消失が発生する可能性がございます。
この度は、掲示板をご利用できなくなりましたこと、誠に申し訳なく思います。
今回の事態は掲示板レンタルのプログラムが、技術的・社会的情勢に追いついていないことを放置したことにより発生したものと認識しております。掲示板をご利用いただいておりました皆様には、ただ平謝りする他ございませんが、何卒ご理解をいただきたく、お願い申し上げます。(追記あり)
2011年12月11日
ひまわり証券とは(ひまわりFXの紹介)
久々の投資ネタです。
現在、株はSBI証券
で運用、FXは休止中の鯖缶ですが、円高継続中ということでFXを再開しようかと、各社の条件を検討中です。
FXはオリックス証券・外為ドットコム・ひまわり証券・マネーパートナーズ・FXアジアと渡り歩いてきましたが、身を引いた後で分別保管が義務づけられたり金融庁の監督を受けるようになったりと、色々様相が変わってきたので、再開するに当たり各社のサービス・条件を調べ直す必要が出てきました。
ちなみに、ひまわり証券については「ひまわり証券とは」にも詳しく書いてありますが、比較的早期にデイトレ口座をリリースしたことが印象的でした。ただ、私はスワップも受け取りたいし、強制決済されるのは好みに合わなかったのでレギュラー口座にしていました。
(追記あり)
現在、株はSBI証券
FXはオリックス証券・外為ドットコム・ひまわり証券・マネーパートナーズ・FXアジアと渡り歩いてきましたが、身を引いた後で分別保管が義務づけられたり金融庁の監督を受けるようになったりと、色々様相が変わってきたので、再開するに当たり各社のサービス・条件を調べ直す必要が出てきました。
ちなみに、ひまわり証券については「ひまわり証券とは」にも詳しく書いてありますが、比較的早期にデイトレ口座をリリースしたことが印象的でした。ただ、私はスワップも受け取りたいし、強制決済されるのは好みに合わなかったのでレギュラー口座にしていました。
(追記あり)
2011年12月08日
SSL証明書の更新の時期が近づく
fms.cgi-bin.jpで使用しているSSL証明書の更新時期が近づいています。(1月18日に失効です)


cgi-bin.jpで利用している証明書は、もっぱら↑SSLボックス
(ネットオウル)経由のRapidSSLです。
理由は安いから。
運営者に関する情報は証明してくれないけど、通販サイトじゃないのでそんな必要ないし、技術的なセキュリティが確保されればOKってことで。
・・・まあ、SSL証明書入れても、コンテンツがなければ無駄遣いなんですけど。
cgi-bin.jpで利用している証明書は、もっぱら↑SSLボックス
理由は安いから。
運営者に関する情報は証明してくれないけど、通販サイトじゃないのでそんな必要ないし、技術的なセキュリティが確保されればOKってことで。
・・・まあ、SSL証明書入れても、コンテンツがなければ無駄遣いなんですけど。
2011年12月03日
シュタゲ公式ガイドがまだ届かない
TV Anime Steins;Gate OFFICIAL GUIDEBOOK 記憶補完のモノグラフ
をAmazon.co.jpで予約していましたが・・・まだ届きません。12月1日には発送されているのに・・・。
発送先は関東なのになぜ大阪から発送するのか。千葉からでいいじゃなイカ。
Amazon.co.jpで予約しておいたのですが・・・昨日(12/2)にページを確認したら、当日お届け可能になってるじゃないですか。
そういや、ひだまりスケッチ×SP 【完全生産限定版】 [Blu-ray]
も随分と届くのが遅かった。
年会費払ってアマゾンプライムに登録しているんだから、予約商品もお急ぎ便を適用してほしいところ。梱包に関する意見のフォームはあるくせに、配送とかプライムに関する意見フォームはない模様。カスタマーサービスにメール入れておくか。
あと、佐川の追跡サービスよりAmazonの配送状況の方が詳細に出てくるって、どういうこと?
と、不満を書いてるくせにしっかりリンクは貼っておくという・・・
## この後、午後5時頃にやっと届きました。ひだまりSPよりは早かった。
発送先は関東なのになぜ大阪から発送するのか。千葉からでいいじゃなイカ。
Amazon.co.jpで予約しておいたのですが・・・昨日(12/2)にページを確認したら、当日お届け可能になってるじゃないですか。
そういや、ひだまりスケッチ×SP 【完全生産限定版】 [Blu-ray]
年会費払ってアマゾンプライムに登録しているんだから、予約商品もお急ぎ便を適用してほしいところ。梱包に関する意見のフォームはあるくせに、配送とかプライムに関する意見フォームはない模様。カスタマーサービスにメール入れておくか。
あと、佐川の追跡サービスよりAmazonの配送状況の方が詳細に出てくるって、どういうこと?
と、不満を書いてるくせにしっかりリンクは貼っておくという・・・
## この後、午後5時頃にやっと届きました。ひだまりSPよりは早かった。
2011年12月01日
確保ドメイン
実は、昔からドメインネームを登録するのが趣味になっているところがあります。
で、取ったはいいけど活用はせず、Google Adsenseのドメイン向けAdSenseに設定したまま放置状態だったりするのですが、VPSも安っすいことですし、何かに活用できないかと悶々としとります。
今、確保しているドメインを挙げると、
1s.tc / 2929831831.com / fwd.jp / hinagiku.in
if.vc / magica.in / magicus.in / wav.jp
whats.jp / xku.in
ってところです。
使い道としては、URL転送や短縮URLが思いつきますが、マネタイズの方法が思いつきません。URL転送の度に広告見せられるのは嫌だろうし、ポップアップはそもそもブラウザのデフォでブロックされるだろうし。
アフィ利用者向けにパラメータ隠すとかの方法もあるけど、無料じゃこっちがやってけない。少額決済も面倒だし・・・Paypalで地道に確認するしかないのかな。
で、取ったはいいけど活用はせず、Google Adsenseのドメイン向けAdSenseに設定したまま放置状態だったりするのですが、VPSも安っすいことですし、何かに活用できないかと悶々としとります。
今、確保しているドメインを挙げると、
1s.tc / 2929831831.com / fwd.jp / hinagiku.in
if.vc / magica.in / magicus.in / wav.jp
whats.jp / xku.in
ってところです。
使い道としては、URL転送や短縮URLが思いつきますが、マネタイズの方法が思いつきません。URL転送の度に広告見せられるのは嫌だろうし、ポップアップはそもそもブラウザのデフォでブロックされるだろうし。
アフィ利用者向けにパラメータ隠すとかの方法もあるけど、無料じゃこっちがやってけない。少額決済も面倒だし・・・Paypalで地道に確認するしかないのかな。

