postでリダイレクト

2007/05/10 | その他

時々だがこういうお話を聞くことがある(PHP-MLネタ)。

(1) ブラウザからプログラムAにリクエストを出して、Aでしかるべき処理をし、
(2) その後ブラウザからプログラムBへ、プログラムAで処理した内容を持ってpostしたい。

これは「できない」のだ。こんなことができてしまったら大変だ。悪意あるサーバに対して誤ってリクエストを送っただけで、例えば「別のブログサイトへスパム投稿させる」といったこともできてしまう。
上記のような処理を思いついたなら、即座にその考えを捨て、別の処理方法を探るべきだ。

別解として、いくつかあると思う。ぱっと思いついただけでも、
(1) Aで処理した内容をセッションに保存してBへリダイレクトさせ、そして処理。
(2) Aで処理して、必要であればBをインクルードして追加処理をし、結果を表示。
こんなことでできるはず。

しかし最近面白い記事を見かけた。いったんAにpostした内容を、Bへpostで再送信させる方法だ。「Do you PHP」の下岡さんのブログでの記述

HTTPレスポンスで「一時的にこっちのURLをつかってね」返す方法だ。やり方はheader関数を使って、

header(‘Location: http://www.example.com/B.php’, true, 307);

とステータス307を返してやるというもの。なんでもFireFoxではダイアログが表示されるが、IEでは何も表示されず(何事もなかったように)うまくpostしてくれるそうだ。いろいろなステータスコードがあるものだ。

しかしやっぱりスマートな処理方法ではないと思う。
ロジックを見直すほうがきっとスマートなプログラムになるはず・・・。

PageRank取得プログラム改修

2007/05/09 | PHPライブラリ

仕様の変更?で取得できなくなってしまっていたPageRank取得プログラムを改修した。今まではレスポンスをxmlで受け取ってそこからPageRankと思しき部分を切り出していたのだが、現在はリクエスト時に直接PageRankをとるようにしている。取り急ぎ、うまく動いている模様。
現在プログラム等々とりまとめ中。近日公開予定。

PageRank取得ページはこちら

Pleskサーバで発生したPHPの問題

とある案件で、mojaviで構築したシステムをPleskを使った共用サーバへ移行できるかどうか調査をおこなった。開発環境はmojavi + QuickForm + Smarty。

まず第一の問題。PEARのインストールができない。これはおそらくsafe_modeの設定がされているためで、外部のファイルを読み取ることができない、というようなエラーだった。PEARを利用するときは基本的に、http://go-pear.orgからその環境専用のPEARをインストールしているのだが、これができないことが判明した。仕方がないので別サーバで取得したPEARのファイル群を全て手動でコピー。

第二の問題。Smartyで一時ファイルが作成できない。これは単に「一時ファイルが作成できない」ということではない。自分の環境ではmojaviを使う際、Smartyの一時ファイルをモジュールごとにディレクトリを作成してそこに保存している(テンプレートの名前の重複を防ぐため)。その際モジュール用のディレクトリは、プログラムでそのあるなしを確認し、ない場合に自動で作成しているようにしている。どうやらこれが問題らしい。自動作成されたディレクトリ内にファイルは作成されているが、作成されたファイルは全て0バイトのファイルになっていた。しかも、いつもの%%ushd〜〜みたいなファイル名ではなかった。
この問題は各モジュール用のディレクトリを自動生成するのではなく、あらかじめ作成しておくことで回避できることがわかった。

今回の開発は元々「開発ありき」で始まったので(サーバが未定だった)やむをえないのだが、本番サーバ環境というのは大切だとあらためて実感した。いい勉強になった。

PageRankが取得できなくなった要因の考察

2007/05/06 | PHPライブラリ

今まで動いていたPageRank(ページランク)取得プログラムが突然動かなくなった。
いろいろ調べてみて、なんとなく原因がわかった。

PageRankを取得するために、Googleのサーバにクエリを投げるわけだが、レスポンスはXMLで返される。その中のPageRankに相当すると思われていた部分が今は全て「0」で返されている模様。つまりプログラムは正しく動いているのだが、レスポンスが0になってしまっているわけだ。

考察としていえるのは以下の2点。
○元々PageRankじゃないものを取得していた(PageRankに非常に近いパラメータであった)
○Googleからの出力の仕様が変わった(おかしくなっている?)。

PageRankだけを取得するクエリがあるのだが、こちらだと問題なく取得できるようだ(よって今まで動作していたプログラムには問題がなく、Google側の問題と思われる)。

原因がわかったので、全部とりまとめて、PageRankのプログラムを公開します(公開といってもどこかの誰かさんが作成したプログラムの改良ですので、あまりオリジナリティはありませんが)。乞うご期待。

PageRank取得アルゴリズムの変更?

2007/05/05 | PHPライブラリ

モロモロ好評をいただいているGoogleのPageRankを取得するための仕組みだが、実はつい最近取得できなくなった。自分の手元にはこれまで2種類のプログラムがあって、そのどちらでも取得できていたのだが、これがどちらでも取得できなくなってしまった(この二つのプログラムの内容の違いは、実は自分でも把握してなかったりもする)。いずれにしても「突然」PageRankが取得できなくなったのだ。ただし完全にエラーが返されているわけではなくて、PageRankが0で値が戻ってきているようだ(詳しく調べていないけどそんな感じ)。
理由はわからないけど、プログラム内部のチェックサム値がかわったのか何なのか・・・。
そこでまたまったく別のプログラムを使ってPageRankを取得してみた。するとこちらは大丈夫。うまく取得できた。

プログラムの書き方がそれぞれ違うので、一度詳しく調べてみないといけない。ただしこれ自体、本来APIとして提供されている機能でもないから、今回解決できたとしても、また動かなくなる可能性も大きい。

とりあえず近日中に現在公開しているプログラムは入れ替えるけど・・・。やっぱり公開できないかもしれない。
期待してくれてた人、ごめん。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net