カテゴリー別アーカイブ: プログラムとか

SWFObjectの使い方

久々のネタを。

サイトにFlash(swfファイル)を埋め込みたい場合、SWFObjectが便利です。

現状、Ver1.5 と Ver2.1 とがあり、パラメータの指定の仕方が違います。

なので、そのあたりを書きますね。

SWFObject Ver1.5 の場合

new SWFObject(
[SWFファイル名],
[embed id],
[横幅],
[高さ],
[Flashのバージョン],
[背景色]);
具体的な使い方
<script type="text/javascript" src="swfobject.js"></script>
<div id="swf_object"></div>
<script type="text/javascript">
var swfObj = new SWFObject("sample.swf", "sample", "800", "600", "7", "#FFFFFF");
swfObj.write("swf_object");
</script>

SWFObject Ver2.1 の場合

swfobject.embedSWF(
[SWFファイル名],
[embed id],
[横幅],
[高さ],
[Flashのバージョン],
[expressInstall.swf],
[flashvars],
[params],
[attributes]);
具体的な使い方
<script type="text/javascript" src="swfobject.js"></script>
<div id="swf_object"></div>
<script type="text/javascript">
flashvars = {};
params = {};
attributes = {};
swfobject.embedSWF("sample.swf", "swf_object", "800", "600", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
</script>

flashvars : Flash自身に渡すパラメータ

params : Flashプラグインに渡すパラメータ

attributes : よく分からない。。。

今回はこんな感じで。

もうちょっとちゃんと調べたら清書します。

でわ。

Smartyでファイル出力エラー

PHPのテンプレートエンジンである、Smartyを使用したWebサイトにて不具合が。

エラーの内容を見てみると、

Smarty error: problem creating directory [ディレクトリパス]

が出力されていました。

Apacheのサービスは正常動作している。

Apacheのエラーは出力されていない。

ディレクトリのパーミッションも問題無し。

phpinfo見ても大丈夫。

って事で、ちょっとハマりました。

結果、原因はinode。

※WebサーバはLinux(CentOS)

Smartyが出力するキャッシュのディレクトリにえらい数のディレクトリとファイルがあり、inode を超えていたようです。

なので、とりあえずはキャッシュ削除して復旧。

調査している中で、

Smarty.class.phpの、

var $use_sub_dirs = true;

を、

var $use_sub_dirs = false;

にすれば大丈夫。

とのエントリもありましたが、既に false になっていた。。。。。

暫定対応ですが、定期的にキャッシュ削除するスクリプトでも組んで、cronで回そうかと思います。

根本的な対応はまた別途。

でわ。

Javascriptのwindow.open で、ブラウザを最大表示っぽく表示する方法

Javascriptのwindow.openを使用してポップアップを表示する場合、ブラウザを最大化して表示する事が出来ません。

そこまで制御は出来ないようで。

では、どうするか?

それっぽく見せれば良いのです。

■検証環境

OS:WinXP

ブラウザ:IE6 SP2、FF3.0.11

function func_open_max_window(){

var URL = “test.html”;

x = (screen.width) / 1 – 10; // はみ出るから調整

y = (screen.height) / 1 – 100; // はみ出るから調整

win_obj = window.open(URL,”new_win”,”screenX=0,screenY=0,left=0,top=0,width=”+x+”,height=”+y+”,scrollbars=yes,toolbar=yes,menubar=yes,staus=yes,resizable=yes,location=yes”);

}

と、こんな感じ。

要は、screenのサイズを取得して、それより少し小さいサイズを指定してあげる、と。

で、表示位置は左上から。

ちょっと気持ち悪いけど、それっぽく表示出来ます。

タスクバーを常に表示している場合、かぶっちゃうかもですが・・・

でわ。

PHPでOracle接続

簡単に手順を書きます。

前提として、

OS:CentOS3.9

Apache:2系

PHP:4.4.114.4.1

Oracle:10.2.0.3

です。

1) Oracleのサイトより、Oracle Instant Client をダウンロードする

oracle-instantclient-basic-10.2.0.3-1.i386.rpm

oracle-instantclient-devel-10.2.0.3-1.i386.rpm

これだけでも良いが、接続確認の為、SQLPlusも。

oracle-instantclient-sqlplus-10.2.0.3-1.i386.rpm

2) PHPのインストール

configureオプションに以下を付与する

–with-oci8-instant-client=shared,/usr/lib/oracle/10.2.0.3/client/lib

3) php.iniの編集

以下を追加

extension_dir = “#PHPインストールディレクトリ#/lib/php/extensions/no-debug-non-zts-20020429/”

extension=oci8.so

4) 環境変数の設定

LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib/

ORACLE_HOME=/usr/lib/oracle/10.2.0.3/client

文字化けするようなら、NLS_LANG も追加

5) Apacheの再起動

/etc/rc.d/init.d/httpd stop

/etc/rc.d/init.d/httpd start

6) 接続確認

sqlplus system/manager@DB_SERV_NAME:1521/SID

上記を実行して、以下が表示されればOK

SQL*Plus: Release 10.2.0.3.0 – Production on Wed Mar 25 02:33:57 2009

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Connected to:

Oracle Database 10g Release 10.2.0.3.0 – Production

SQL>

7) テストスクリプトにて、PHPから接続出来る事を確認

以下サイトを参考にしました

http://www.doyouphp.jp/inst/inst_unix_dso_430_ic.shtml

これで、テーブルの中身が表示されれば、PHPからのOracle接続は成功!

でわ。

Javascript:window.open で画面中央に表示する

掲題の通りです。

Javascriptで、ポップアップで別ウィンドウを表示する際に、画面中央に表示する方法です。

例えば、800×600のサイズのウィンドウを表示する場合。

// 表示するウィンドウのサイズ

var w_size=800;

var h_size=600;

// 表示するウィンドウの位置

var l_position=Number((window.screen.width-w_size)/2);

var t_position=Number((window.screen.height-h_size)/2);

window.open(‘test.html’, ‘test’, ‘width=’+w_size+’, height=’+h_size+’, left=’+l_position+’, top=’+t_position);

てな感じです。

でわ。

JavaScriptでのコンボボックスの連動

※他Blogリニューアルの為、記事を転載

同じ値が設定されているコンボボックスが2つあり、

一方が選択されたら、もう一方も全く同じ値を表示するようにしたい場合、どうしたらよいか。

一覧が表示されるようなページでヘッダとフッタにこんなのがあったりしますな。

で、こんな感じ。

【ヘッダーコンボボックス】

<select name=”combo” onChange=”chCombo(‘header’);” id=”header”>

  <option value=”1″>1

  <option value=”2″>22

  <option value=”3″>333

  <option value=”4″>4444

  <option value=”5″>55555

</select>

【フッターコンボボックス】

<select name=”combo” onChange=”chCombo(‘footer’);” id=”footer”>

  <option value=”1″>1

  <option value=”2″>22

  <option value=”3″>333

  <option value=”4″>4444

  <option value=”5″>55555

</select>

【選択時に実行されるスクリプト】

function chCombo(type) {

  if (type==”header”) {

    document.getElementById(“footer”).selectedIndex = document.getElementById(“header”).selectedIndex;

  } else {

    document.getElementById(“header”).selectedIndex = document.getElementById(“footer”).selectedIndex;

  }

}

今日はこんな感じで。

でわ。

JavaScriptでの日付の計算

※他Blogリニューアルの為、記事を転載

例えば、本日日付から3ヶ月前の日付を取得したい場合、どうするか。

色々考えた挙句、以下のような方法になった。。

※コメント全然書いてないですが。。。

1) まず、本日日付の取得(yyyymmddの文字列とする)

nowdate = new Date();

var nowyear = nowdate.getFullYear();

var nowmonth = nowdate.getMonth() + 1;

var nowday = nowdate.getDate();

if (nowmonth.toString().length == 1) {

nowmonth = “0” + nowmonth;

}

nowday = “” + nowday;

if (nowday.toString().length == 1) {

nowday = “0” + nowday;

}

var result = nowyear + “” + nowmonth + “” + nowday;

結果:20070321

2) 3ヶ月前の日付を取得(単純に月に3を減算する)

var befyear = parseInt(result.substring(0, 4));

var befmonth = parseInt(result.substring(4, 6));

var befday = parseInt(result.substring(6, 8));

if ( befmonth < 4 ) {

befmonth = befmonth + 12;

befyear = befyear – 1;

}

befmonth = befmonth – 3;

// 連結

result = befyear.toString() + befmonth.toString() + befday.toString();

結果:20061221

上記で3ヶ月前の日付を取得出来そうなのだが、例えば、

2007/05/30

の3ヶ月前の場合、上記だと、

2007/02/30

となってしまう。

こんな日付は無いので、どうするかと言うと・・・

3ヶ月前と取得した、20070230 を・・・

var UCTDate = new Date(result.substring(0,4) + “/” + result.substring(4,6) + “/” + result.substring(6,8));

// 1970年1月1日0時0分0秒(UTC)からのミリ秒数換算

result = UCTDate.getTime();

とする。

2007/02/30 を一度DATE型へキャストし、キャストしたDATE型の日付を、ミリ秒へとキャスト。

※1970/01/01 00:00:00.00 からの経過ミリ秒数

んでもって、

var tDate = new Date();

tDate.setTime(result);

// それぞれ取得

var tmpyear = tDate.getFullYear();

var tmpmonth = tDate.getMonth() + 1;

var tmpdate = tDate.getDate();

// yyyymmddのフォーマットへ

if (tmpmonth.toString().length == 1) {

tmpmonth = “0” + tmpmonth;

}

if (tmpdate.toString().length == 1) {

tmpdate = “0” + tmpdate;

}

// 連結

result = tmpyear + “” + tmpmonth + “” + tmpdate;

ミリ秒数へとキャストした値を、もう一度DATE型へ戻す。

すると、

2007/02/30 としていた日付が、2007/03/02 へ変更されるのです。

本日日付に90日を減算してもいいのだが・・・

とりあえず、現状は上記にて落ち着いた感じですわ。

他にいい方法があれば、教えてくだされ。

でわ。

ぬぅ・・・

Actionscript2.0 には正規表現がない・・・

Javascript にはあるのに・・・

FS_Command でやればJavascriptでの実装でよいのだが、

戻り値を受け取るのが面倒である。

Actionscript3.0 には正規表現があるようで。

もう、AS3 へ乗り換えだなぁ・・・

でわ。