PHPからバッチファイルを実行してpsql.exeを実行する方法

windowsシステムで稼働しているApache,PHPから、PostgreSQLへのテキストファイルのインポートを実施したいのですが、
PHPのexecでコマンドを実行するとなぜかブラウザがタイムアウトするまで読み込み中。
しかも、処理が完了していない。

execのコマンドの構文が間違っているのか?
調べたところ、psqlコマンドに-cと-qのオプションがないと対話式になってしまう。

-c ‘SQL’ クエリ(SQL)を直接実行
-q psqlが対話なしに実行される。

しかし、状況変わらず。

一度バッチファイルに処理を書き出して実行するもNG.
しかし、サーバー上でバッチファイルを実行すると正常動作。

さらに調べたところ、パスワードの入力待ちではないのか。
そもそもwindowsのApacheはサービスで稼働しており、daemonとして実行。
パスワードファイルを作成するとコマンドプロンプトではパスワード聞かれないみたい。
(参照:http://www.postgresql.jp/document/8.4/html/libpq-pgpass.html)

環境変数にセットすればいいのでは。
バッチファイルの先頭にパスワードセットのコマンドを出力するように変更。
SET PGPASSWORD=xxxxxxx

正常に動作しました。

出力やエラーが出ないのでハマりました。

owncloudを4.5から5にアップデート

プライベートストレージとして、owncloudを使ってるんですがブラウザでログインするとできなかったので、とりあえず5にアップデートしてみることに。

手順としては、

1.既存のファイルをバックアップ。

2.ファイルのダウンロード、解凍後上書きコピー

3.mysqlのデータベースを削除。

これでアップデート完了。

初期画面が表示され、ログイン。

あれ?

やっぱりできない。

ログを見てみると、PHPのsessionフォルダの権限の問題。

権限を設定したらログインできました。

ついでに、クライアントもアップデート。

なぜか、mac版は英語だけど。

IEとその他のブラウザでjavascriptの挙動が違う

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

javascript内でPHPをパラメタ付きで呼び出すのですが、Firefoxでは正常に動作するも、IE9では正常に動作しない。
パラメタには日本語を含めていました。
なぜ???
いろいろと調べた結果、文字コードの問題でした。
HTML,PHP,javascript全てUTF−8で記述しているのですが、パラメタを渡すとSJISとして渡ってしまう。
うーん、metaタグとかscriptタグにcharset=”UTF-8″を付加してるのになぜ。
結局、javascript内で以下のような記述をすることでIE、Firefoxともに同じ動作をするようになりました。
var Str = encodeURIComponent(文字列);
原因がわかるのに、苦労しました(–;)

CentOS 5にPHP5.2以上をインストール

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に設定。

PostgreSQL 文字コードの設定

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

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

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

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

FPDFで出力したPDFを印刷するときの注意点

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

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

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

時間のかかる処理でブラウザタイムアウトの対策(firefox)

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

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

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

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

続きを読む

要素の座標を取得 javascript

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 数値→文字列、文字列→数値の変換

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のバージョンかもしれませんが、私の環境下ではこのような結果になりました。

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

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

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