とあるシステムを構築中にハマった体験を。


javascript内でPHPをパラメタ付きで呼び出すのですが、Firefoxでは正常に動作するも、IE9では正常に動作しない。
パラメタには日本語を含めていました。
なぜ???
いろいろと調べた結果、文字コードの問題でした。
HTML,PHP,javascript全てUTF−8で記述しているのですが、パラメタを渡すとSJISとして渡ってしまう。
うーん、metaタグとかscriptタグにcharset="UTF-8"を付加してるのになぜ。

結局、javascript内で以下のような記述をすることでIE、Firefoxともに同じ動作をするようになりました。
var Str = encodeURIComponent(文字列);

原因がわかるのに、苦労しました(--;)

CentOS 5系でyum install php でインストールした場合にはPHP5.1.6がインストールされる。

別にプログラム自体は問題なかったのだけど、phpmyadminの最新版は対応していない。

そこで、PHP5.2以上をインストールしなければ。

そのときに、やったことをメモ。


# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka # vi /etc/yum.repos.d/utterramblings.repo
[utterramblings] name=Jason's Utter Ramblings Repo baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/ enabled=0 gpgcheck=1 gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka priority=0

最期の行のpriority=0を設定

# yum --enablerepo=rpmforge --enablerepo=utterramblings update php

終わったらrpmforgeとutterramblingsはenabled=0に設定。

普段はMySQLを使っているのですが、ひょんなことからPostgreSQLの設定をすることに。

MySQLだったら、my.cnfの設定ファイルを修正したら文字コードを設定できるのだが、PostgreSQLは一体どこに?


調べたら、PostgreSQLのユーザでログイン後にコマンドから設定するらしい。

//postgresユーザでログイン
# su - postgres
//文字コード設定
% initdb --encoding=EUC_JP

FPDFで出力したPDFを印刷したときに、フォントが違うので悩まされました。
Windowsだと、近いフォントで出力されますが、Macだと少し違うフォントで出力されます。
と、言うかインストールされているフォントによって異なります。
調べた結果、印刷するときにはコンピュータにインストールされているフォントが使われいるみたいです。
PDFで表示されているから、そのまま印刷されるだろうと思ってました。


原因は、FPDFで出力したPDFのフォントがコンピュータにないからです。
FPDFのjapanese.php内のフォント指定が"KozMinPro-Regular-Acro"となっています。
これは、標準での設定だったと思います。
これを、"KozMinPr6N-Regular"に変更すると表示と同じ印刷結果になりました。


この"KozMinPr6N-Regular"というのは、Adobe Reader Xに組み込まれているものですが、バージョンが上がると変わるかもしれないので注意が必要です。

PHPなどで、処理を実行するときに長時間の処理となってしまう場合、ブラウザ側でタイムアウトとなってしまい継続処理がうまく実行できない場合があります。

定期的にパケットを送信してタイムアウトにならないように対策をしますが、それでも対応できない場合にブラウザのタイムアウトの設定を調整します。定期的にパケットを送信してタイムアウトにならないように対策をしますが、それでも対応できない場合にブラウザのタイムアウトの設定を調整します。

Firefoxについては、アドレスバーにabout:configと入力することで設定画面を開くことが出来ます。

表示された項目のnetwork.http.keep-alive.timeoutという項目がタイムアウト時間にあたります(秒数指定)。

javascriptで指定した要素の座標を簡単に取得する方法です。


function getElementPosition(e)
{
    var p = {x:0,y:0};
    if( !e.offsetParent ){
        return p ;
    }
    else{
    }
    p.x = e.offsetLeft;
    p.y = e.offsetTop;
    if(e.offsetParent){
        var pp = getElementPosition(e.offsetParent);
        p.x += PixNum( pp.x );
        p.y += PixNum(pp.y );
    }
    return p;
}
function PixNum(sz)
{
    var s = (sz + "").replace(/\D/g,"");
    var n = parseInt(s);
    return n;
}

objective-cで数値を文字列に変換する方法と数値を文字列に変換する方法


//文字列を数値に変換
int suuji = [ @"100" intValue ];

//数値を文字列に変換
NSString* moji;
moji = [ NSString stringWithFormat : @"%d", 100];

よく使うけど、いつも忘れる

PHPで、四則演算をすることって多々あると思います。

その中で、小数点を含む計算をしたときに、コンピュータは賢いようで賢くないので、誤計算をしてしまいます。

例えば、
(0.1 + 0.7) * 10
答は、8なのですが、
コンピュータが出した答は7

おいおい、ってなるんですよね。

PHPだと、bcadd()関数を使って計算しないとダメなのです。
乗算の場合は、bcmul()関数。


ところが、いろいろとやっているうちに、同じ計算をしているのに現象が起きるページと起きないページがあるんです。

なぜか?

違いを見比べて見たところ、
現象が起きているページ→計算結果を直接出力している。
現象が起きていないページ→計算結果を変数に格納してから、出力している。
PHPのバージョンかもしれませんが、私の環境下ではこのような結果になりました。

結論:
計算結果は、一度変数に格納してから、出力するといい。

もしかすると、特定の環境下という条件かもしれません。

詳しい情報お持ちの方は、ご教授下さい。

PopBox.js内の

elem.style.zIndex = null

この一行をコメントアウトするといいらしいのだが、

直った!

なんでなんだろう???

javascriptで背景色で分岐して、処理を行うことしようとしていたのですが、IEだと正常に動作してFireFoxだと指定した条件が無視されるという現象が発生。


if(row.cells.item(x).style.backgroundColor == "#ffdddd"){
    処理A;
}
else{
    処理B;
}

原因は、firefoxだと、RGB形式で色を指定しないとダメでした。


なので、


if( (row.cells.item(x).style.backgroundColor == "#ffdddd") ||
(row.cells.item(x).style.backgroundColor == "rgb(255, 221, 221)") ){
    処理A;
}

とすると正常に動作しました。

カスタム検索

ioPLAZA【アイ・オー・データ直販サイト】 ioPLAZA【アイ・オー・データ直販サイト】
あれもこれも標準装備のレンタルサーバ あれもこれも標準装備のレンタルサーバ


Web広告限定ストア(eクーポン)Web広告限定ストア(eクーポン)

問い合わせ

メールフォーム