あぶね~

2015年05月15日 | CGI/PHP
PHPで自動巡回でページを見に行かせてるスクリプトがあるんですが、いつの間にやら

getaddrinfo failed: Name or service not known

なんてエラーが出て動かなくなってました。SSHでサーバに繋いでnslookupしてみても問題なく解決できてるよう。

よくわからないままapacheを起動し直したら直りましたが。

先月末、提供終了予定のDNSサーバーを利用しているので早急にご対応くださいみたいなメールが来ていたんでそのせいかなぁ。いや、調べたけど別にそのサーバは使ってなかったんで放っておいたんですよね。

何にしても自動化すると結果を見なくなるのでエラーが起きていても気づかないままってことになります。今回は早めに気づいたのでよかったですが、いつも通り動いてるはずなんて思っていると痛い目に遭うこともありそうですね~。

ie10

2013年12月12日 | CGI/PHP
ie10でJavaScriptが動かなくなったら・・・ie専用に分けていた処理をやめてみる。なんだか業界標準に合わせたらしいですね。今更かよっ(笑)!今更そんなことされても9以前のものを切り捨てられるわけでもなし、手間はかえって増えますね。長期的にはいいことだと思いますが。

ちなみに、うちのWindowsはまだXP。ie10なんて入れられません(笑)。サポート切れだって?んなもん知るか(笑)!いや、Macの仮想環境に入れてWinじゃなきゃダメな時だけ使ってるに過ぎないんでそれで十分なんですが。

今回ie10で動かないって報告がお客さんから入って最悪アップグレードかとも思いましたが、どうにかお客さんに確認してもらいながら原因は突き止めたので、まだまだXPは現役ですわ!

auさんバグですよ~!

2010年01月23日 | CGI/PHP
強運の年が3週間過ぎましたが・・・未だ何も起こりません(笑)。どうなってるんですか~~(爆)?

たまには開発日記らしいお話を。
入力フォームからPHPに渡したデータが文字化けするって言われたんですが、ドコモもソフトバンクも、もちろんPCも何でもないのにauだけ。携帯ページの場合、eucをshift_jisに変換して出力してるんでその辺のミスを疑うのが第一ですが、それだとauだけってことにはならないですしね・・・。入力内容によるのかもと、何も入力しないで送信してもらうとNULL文字(\0)が表示されるとのこと。ってことは、auがNULL文字を送ってるってことじゃないの。どうやらNULL文字を送るって言うより、入力の末尾にNULL文字付けて送ってくれちゃっているようです。端末内部で扱ってるC言語の文字列をそのまま送っちゃってるんでしょうか。

問題は、それが起きるページと起きないページがあるってことなんですが、注意深く両サイトを見比べてみて、ようやく原因発見。

<form method="post" action="・・・.php" enctype="multipart/form-data">

enctype="multipart/form-dataを入れると起こります。携帯から画像アップしたりしないんでmultipart指定が必要になることはないと思いますが、うっかり入れてしまうとなかなか原因がわからずにハマることになりそうです。特に、PC版のページ作ってコピペ等で携帯ページ作ると、入ったままにしちゃうなんてことよくあるのでは?

multipart指定は携帯では現状使わないんで実害はないと言えばその通りではありますが、バグはバグですよ、auさ~ん!

PHP5のtime()

2007年09月02日 | CGI/PHP
来たよ、ついに来たよ~。松井大輔招集!オシムさんありがと~!
でも、いきなり呼ばれてすぐ試合でしょ?うまく機能するんでしょうか・・・っていうか、そんなんですぐに評価決められたりしないかとちょっと心配。チャンスは十分に与えてくださいませ~。

PHPにtimeって関数があるよね。あれってPHP4だとローカルタイムを返すと思うんだけど、合ってる?
だから、例えば

$time_diff = time() - gmmktime() + 9*3600;

なんて実行すると、time()は日本にあるサーバなら日本時間、gmmktimeはGMT(グリニッジ標準時)を返すんで、その差に日本時間とGMTの時差9時間を(秒で)足してやると、$time_diff(時差)= 0という結果になります。

でも、うちのローカルにある(MAMPに入ってるやつね)PHP5だけは、$time_diff = 32400となります。32400って9*3600のことだから、つまり、time()はこのときGMTを返してるってことになります。これって、PHP5の仕様なんですかね?
他にPHP5のサーバで試せる環境がないんで、そうなのかなぁって思ってるだけで、PHPのバージョンの違いか設定の違いかはわかりません。ちなみに、タイムゾーンはAsia/Tokyoになってますんで、その辺の設定のせいでもないようです。

でまぁこういう場合、上の計算式はどうしたらいいかというと、

$time_diff = date("Z") - 9*3600;

とすればOKです。date("Z")は、ローカルな時刻のGMTとの時差を秒で直接返してくれるので、これ一つでOKというわけですね。

前から思ってたけど・・・1

2006年08月16日 | CGI/PHP
駒大苫小牧、すげぇな・・・でも、ミラクルではあるが、これぞ駒苫の勝ち方って感じだから、ある意味いつも通り?

さて、今日はJavaScriptに関して前から思ってたけど・・・ってお話。JavaScriptで別ウィンドウを開くには、

window.open('aaa.html', 'new', '・・・

なんてやるわけですが、これを繰り返し呼んだ場合は、すでに開いてある(この場合だと「new」って名付けられたウィンドウ)に表示されるわけです。ここまではどのブラウザでも同じはずだと思いますが、ここからがちょいと違う。
Macだと、ウィンドウに表示された後そのウィンドウが必ず前面に出てきます。最初に開く時も、すでに開いたものに表示される時もです。これが、Windows(ie)だとすでに開いたものに表示する時は前面に出てこないので「あれ?」ってことになります。クリックしても何も起きないので変だなぁと思っていたら、背後にあるウィンドウが密かに更新されてるってわけです。何でこうなってるんでしょうね・・・今まさに表示させたいものを前面に持ってきたくないという場面が想像つかないんですが・・・。

もちろんこれは、

var win = window.open('aaa.html', 'new', '・・・
win.focus();

などとして意図的に前面に持ってきてやることで解決可能です。でも・・・・

<a href="aaa.html" target="new">

などとして常に同じウィンドウに表示したい時はどうしたらいいんでしょうね・・・この場合もJavaScriptと同じでWindowsだと2度目からは前面に出てきません。しかたなく同じウィンドウは諦めて、target="_blank"にしたりしてますが、常に前面に来るようにしておいてくれればそれで済むのに・・・などといつも思ってます。えっ?常にwindow.openを使えって?う~ん、何だかなぁ・・・・。

プロフィールメーカーアップデート

2006年07月26日 | CGI/PHP
プロフィールメーカー1.5(CGI)、1.1(PHP)をリリースしました。内容はここでお伝えしている通り、画像入力のオートフィル機能、あとは削除確認画面で実際のプロフィールページを表示するようにしました。iframeに読み込んで表示させてるだけですのでそんなに難しいことはやってませんが、こうして実際に見て確認した方が削除間違いが起こりにくいでしょう。フレームの大きさはprefsで指定出来ますので、作成するプロフィールページの大きさに応じて調整してください。

LE版(CGI)の方も久々更新してます。

プロフィールメーカーにオートフィル2

2006年07月20日 | CGI/PHP
別の仕事が終わったので、こちらをリリースしようかとちょっと動作確認してみたら・・・ie(MacでもWinでも)で画像入力をResetしたら全部「undefined」になるではないですか!Safariで開発してるんで気付きませんでした(CGI PHP)。

なんかミスったかなぁと見直してみましたが、特別おかしいところもなく・・・いろいろ動かしているうちに拡大画像の方は何でもないことを発見。同じ処理をしてるのに・・・・。

原因はここでした。

var images= new Array($imglist);
var limages = new Array($limglist);

リセット時に元のデータに戻すために初期値を配列に保持してるんですが、「images」という名前はieでは特別に扱われるようですね。変数名にしても変数として扱ってくれないようです。ただし、グローバル変数の場合ね。

function resetFill(vname, images)

なんて書いたものは大丈夫みたいです。と言うわけで、名前を変えて解決。

var imglist = new Array($imglist);
var limglist = new Array($limglist);

さて、もう大丈夫かな?

JavaScriptの正規表現で変数?

2006年07月15日 | CGI/PHP
昨日の続きで、今日は技術的なお話。
JavaScriptの正規表現で変数使う時ってどうするんだろね・・・。
今回は、入力フォームの変数としてimage1,image2・・・にマッチする物を見つけたかったのね。それだけなら、

aaa.match(/^image([0-9]+)/)

でいいんだけど、画像(image)と拡大画像(limage)を共通処理にしたかったんで、この正規表現の「image」の部分を可変(変数)にしてマッチさせたいってわけ。Perlだったら、

$aaa =~ /^$image[0-9]+/

と変数「$image」とでもしてぶち込んじゃえばいいんで、非常にわかりやすいし便利。JavaScriptで同じことしようったって、変数に「$」がついてて区別出来るわけではないので、入れようがない。

調べてみたら、正規表現オブジェクトというのがあるらしい・・・

re = new RegExp("^" + vname + "[0-9]+$");

なんて作るんだそうな。「vname」は変数ね。これに「image」だの「limage」だの入れて渡してやればいい。んで、

aaa..match(re)

でマッチング。結果はこれでうまく行ってますが、こうするしかないんかな・・・まぁこうするものならそれで全然構わないんだけど。Perlの場合の単純さに比べるとなんかねぇって思うだけで・・・。「/・・・/」なんてPerl風の書き方してるだけに余計にね。

プロフィールメーカーにオートフィル

2006年07月14日 | CGI/PHP
今日はホントに開発日記(いつもは何なんじゃい!・・・ってツッコミはご勘弁)。

今日は、プロフィールメーカーの画像入力欄にオートフィル機能を付けてみました。9個ある入力欄の先頭に画像ファイル名を入れると、残りの入力欄に同じ形式でファイル名を埋めてくれるものです。例えば、image1.jpgって先頭に入れたらimage2.jpg, image3.jpg・・・・image9.jpgって感じね。

ショップページメーカーの方で似たようなことはすでにやってたんですが、プロフィールメーカーの方にも付けましょうかというのが今回の試みです。出来上がりは、こんな感じ(CGI PHP)。

「~番目までFill」で先頭のファイル名を元に指定番目までの入力欄を自動的に埋めます。入力欄は9個あるけどそんなに使わないとか、データによって個数が違うとかいう場合があるので、「~番目まで」と指定出来るようにしてあります。もちろん、5個しか使わないとか決まっているなら入力欄自体を削って使っても問題なく動作するようにしてあります。

ワンクリックで入力出来るようにしたら、ワンクリックで消去出来るようにしておかないと気軽にクリック出来ませんね・・・「Clear」ボタンをどうぞ。

入力をやり直したい時もあるでしょう・・・「Reset」ボタンをどうぞ。1個前の状態に戻る(Undo)のとどっちがいいかなぁとも思ったんですが、ここは最初の状態に戻るようにしました。

数値部分が一カ所であるようなファイル名であれば、だいたいご希望通りの結果になるのではないかと思います。2カ所以上ある場合は、前の方の数値が使われます。数値が入っていないファイル名の場合は、全て同じ物で埋められます。

入力の手助けになればと思い付けてみましたが、いかがなものでしょう?ちなみにこちらは、CGI版1.5、PHP版1.1からのご提供となる予定です。