2008/11/30

[php]ファイルの中身を取得

今、作っているアプリのRSSを実装するのに、phpファイルの中に、
<?xml version="1.0" encoding="UTF-8" ?>
を入れてしまうと、phpが<?の後にphpが書かれていないと解釈し、バグが発生してしまいす。

このバグを回避するために、文字列として認識させればいいのですが、phpファイルにはそのまま書けません。

なので、外部ファイルに書き込み、それを読み込むことを考えました。
include関数や、require関数では、呼び込み先のファイルがphpファイルでないといけないので、別の手を考える必要があります。

そこで、今回、file_get_contentsという関数を使ってみます。

ぐぐってみたら、ここのサイトに的中したので、参考にさせていただくと、

#text.txtの中身
test
hello php
#hoge.phpの中身
$ret = file_get_contents("./test.txt");
print($ret);

があるとすると、test.txtをインクルードした、ret変数は、「test hello php」を表示します。

メールテンプレートを読み込むときとか便利かもしれません。

2008/11/29

[mysql]offset句

select文を使って、しばしば、話題になるのは、どこからどこまで表示するか?という点。

mysqlの場合、offset句というのがあって、「どこからどこまで表示するか?」というのを指定できるみたいです。

SELECT * FROM table LIMIT 5;

via:6.4.1. SELECT 構文

上の場合、最初から5行を取得する構文。

SELECT * FROM table LIMIT 5,10;

via:6.4.1. SELECT 構文

次は、6行目から10行取得しますよぉーという意味。

で、肝心なのは、最初の行を0としているところかな。
いざ、取得する時に気をつけたい点です。

2008/11/28

[javascript]tableの行数を取得する。

今週、一番、感動したテク!!

javascriptで、tableタグの行を取得したい場合、tableのid.rows.lengthで取得できるみたいです。

試しにいくつかテストをしました。

<table id="hoge">
</table>
<script type="text/javascript">
alert(hoge.rows.length);
</script>

この場合、行が存在しないので、0と返します。

<table id="hoge">
<tr>
<td>test1</td>
</tr>
</table>

<script type="text/javascript">
alert(hoge.rows.length);
</script>

今度は、1行あるので、1と返します。

では、次の場合、
<table id="hoge">
<tr>
<td>test1</td>
<td>test2</td>
</tr>
</table>


<script type="text/javascript">
alert(hoge.rows.length);
</script>

これは、列の数が、増えただけで、行数自体は、1行なので、1と返します。

ということで、下の二つの場合は、それぞれ、2を返します。

<table id="hoge">
<tr>
<td>test1</td>
<td>test2</td>
</tr>
<tr>
<td>test3</td>
</tr>
</table>


<script type="text/javascript">
alert(hoge.rows.length);
</script>


<table id="hoge">
<tr>
<td>test1</td>
<td>test2</td>
</tr>
<tr>
<td>test3</td>
<td>test4</td>
</tr>
</table>


<script type="text/javascript">
alert(hoge.rows.length);
</script>


しかも、idをdocument.getElementByIdで拾わなくても、認識してくれる点がすごい。

domを使わなくてもidを認識してくれるタグってあるのかなと想像してみたり。

2008/11/27

[php]substr

前回、Smarty上で、substrをする方法を書きましたが、今回は、phpのファンクションを使っての実行方法

string substr ( string $string , int $start [, int $length ] )
文字列 string の、start で指定された位置から length バイト分の文字列を返します。

via:substr

マニュアルでは上のように書かれているのですが、注意したい点して、最初を0とするところかな。

同様に読んでいくと、マイナスの値も指定することができるらしく、マイナスだと、後ろから指定されていくみたいです。

2008/11/26

[life hack]メモ帳といえば

モールスキンの手帳



大学生の時から使っているので、かれこれ、4、5年の付き合いです。

数ある手帳の中で、なぜこの手帳か?というと、実は、インディージョーンズの最後の聖戦で使われていたので、同じのを使ってみたいなと。



結構、映画で使用されていて、どの作品に使用されているかは、ここで確認できます。
最近だとプラダを着た悪魔かな。

アン・ハサウェイ、ちょーかわいいよー。
まじ最高だよー。
もし、結婚していなかったら彼女と付き合いたいなとー妄想してしまう。
可能かどうかわかりませんが。。。

少し前に、ゲットスマートという映画をみて、一目ぼれしちゃいました。

話がだいぶ飛びましたが、アンハサウェイ最高です。

たぶん、今日のブログ、読んでいる方、相当気持ち悪く思うんだろうなー。。。

まぁーいいやー、たまには。

2008/11/25

[php] sqlite_escape_string mysql_escape_string

sqlインジェクションを防ぐために、エスケープをするのですが、sqliteは、sqlite_escape_stringを使うのに対し、mysqlでは、mysql_escape_stringを使うみたいです。

2008/11/24

[php]mysqlに接続する方法

前回、phpを使ってアプリケーションを作ったのですが、その際に、使ったDBが、sqliteで、今回、mysqlに移行したいなと思い、ちょっとやり方を調べました。

でどころは、ここなのですが、基本的な流れとしては、sqliteの時と変わらない模様です。

//myqlに接続
$open = mysql_connect('MySQL のサーバ名','MySQL に接続するユーザ名','MySQL に接続するパスワード');
//接続するデータベースの選択
mysql_select_db('データベース名');
//sql実行
$ret = mysql_query('実行したいsql');
//select文発行の時

//検索結果の合計数取得
$recordcount = mysql_num_rows($ret);

//表示
for($i; $i<$recordcount; $i++){
  //1行フェッチ
  $currentrow = mysql_fetch_array($ret);
  //表示
  print($currentrow["カラム名"]);
}

// 結果セットを開放し、接続を閉じる。
mysql_free_result($ret);
mysql_close($open);

sqliteと同じで、mysql_free_resultファンクションとmysql_closeファンクションは、別に発行しなくても問題はないようですが、きちんとしたメモリ管理をする上で使ったほうがいいのかもしれません。

長くcfを使っていたので、クエリーを配列で表現するということに慣れておらず、結構、苦戦しちゃいます。

2008/11/23

26歳に

なりました。

それにしても今年もあっという間におわってしまったなー。
とまだ終わっていないのですが。。。

2008/11/22

トムクルーズがカメオ出演

バンパイア以来かもしれない、ここまで劇的に変わってしまったのは。。。

2008/11/21

[mysql]oracle's nvl() is IFNULL

oracleのnvl相当に対応するmysqlの関数を探していたら、やっとみつかった。

expr1 が NULL でない場合は expr1 を返し、それ以外の場合は expr2 を返す。
IFNULL() は、使用されているコンテキストに応じて、数値または文字列を返す。

via:IFNULL(expr1,expr2)

というわけで、例をみてみる。

SELECT IFNULL(1,0);
-> 1
SELECT IFNULL(NULL,10);
-> 10
SELECT IFNULL(1/0,10);
-> 10
SELECT IFNULL(1/0,'yes');
-> 'yes'
via:IFNULL(expr1,expr2)


やっとこれで、null回避処理ができる。

2008/11/20

[javascript]メールチェック

クライアントからメールチェックしたい場合を調べました。

似たようなことをする人は本当にいるだなと改めて実感。

javascriptにおいてメールアドレスを
チェックしたいのですが、自分が使って
いたソースですと、ハイフンなどの記号が
チェックされてしまい完全にチェック出来ません。
なにかいい方法があれば教えて下さい。
ちなみにこんなソースです。

via:Hatena::Question

で、上に対する回答がいくつかあって、一番いいなーと思ったのはこれ。

str.match("^[0-9A-Za-z._-]+@[0-9A-Za-z.-]+$");

via:Hatena::Question

strは、対象となるメールアドレスです。
さっそく使わせてもらおーっと。

2008/11/19

[php]md5関数の戻り値は、、、

16進数の32文字

[php]文字列の長さを取得

もしかして既に書いちゃったかナーと思ったら、まだエントリーを書いていなかったので。

しばしば、文字列の長さを取得したい場合があったので、マニュアルで調べてみることに。

strlen($string)で取得できるみたいです。

ただし、注意点として、長さがない場合(つまり空文字の場合)0を返し、ここではバイト数ではなく、純粋な文字列の長さだと思われる。

2008/11/18

[php]メール送信

phpからメール送信の方法を調べました。
技術ブログPHPで日本語メールを送る - 基本編を参考にさせていただくと、以下のようにソースが記述されていました。

//言語設定、内部エンコーディングを指定する
mb_language("japanese");
mb_internal_encoding("EUC-JP");

//日本語メール送信
$to = "katou@example.com";
$subject = "例の件について";
$body = "どうでしょう?";
$from = "masaki@example.com";

//ちゃんと日本語メールが送信できます
mb_send_mail($to,$subject,$body,"From:".$from);

via:PHPで日本語メールを送る - 基本編

さっそく、何の疑いも持たずに、上と似たようなソースを作って送信してみると、文字化けが??

もともと、文字化けを回避する目的で、mb_language("japanese")と、mb_internal_encoding("EUC-JP")を入れたのに。
おそらく、mb_internal_encoding("EUC-JP")がEUC-JPなので、これをutf-8に変えて、もう一度、試してみると、やはり文字化けが解消されました。

window live mail(hotmail)や、gmailでメールを受信しましたが、やはり文字化けが起きていませんでした。
(上のケースではどちらも実行環境は、firefox2です。)

でも、なんで、EUC-JPだと文字化けを起こすのかなーと考えてみると、ソース全体のエンコードが、utf-8なので、そこに突如、EUC-JPが登場したため、エンコードがあわずも文字化けが発生したものと思われる。

ここら辺は、文字コードという複雑な問題を扱っているので、間違っているようならコメントをしていただけたらなと。

2008/11/17

[javascript]keycodeの取得

IEとfirefoxのkeycode(特に矢印キー)の違いが気になったので調べてみることに。

ソースは下のように実装しました。

<body onkeydown="(function(){alert(event.keyCode);}());">
<script type="text/javascript"></script>
</body>

で、IE6で実行してみると。
「←」:「37」
「↑」:「38」
「→」:「39」
「↓」:「40」

同様に、firefox2で実行。
「←」:「37」
「↑」:「38」
「→」:「39」
「↓」:「40」

矢印キーに関しては、違いがないようです。

他のキーではひょっとしたら、違いがあるのかもしれませんが、その時は、また別エントリーにて書きたいと思います。

参考サイト:各ブラウザでキーコードを取得してみた [JavaScript, 開発日記](Programming Magic)

2008/11/16

[本]本格的なCSS本、セオリー・オブ・スタイルシート

やっとこさ、こちらの本を読了しました。



いつも、アプリケーションを作っていて悩んでいるのが、デザイン。
もっと細かくいうと、スタイルシートの部分。

目次
1 スタイルシートの理論
(情報の組織化とマークアップCSSの基本ボックスと視覚整形モデル)
2 スタイルシートの実践
(チュートリアルの前にサイト/プロジェクト共通のテンプレートの作成
トップページの作成
本文ページの作成)


via:セオリー・オブ・スタイルシート

2部構成になっていて、1部は、margin、paddingなどを理論的に説明してくれるセクションで、2部は、実際、1部で覚えた理論を生かしつつサンプルサイトを作ってみるコーナーになっています。

実際のところ、1部を読まずに、2部から入ってもokだと思います。
というか、1部が難しい場合は、むしろそっちの方がいいかも。
1部で、結構、頭を悩ます部分がでてくるので。

後、付録もついていて、CSSの仕様書の読み方、各プロパティの取りうる値などが記載されていて、3部として扱っても遜色ないかなと。

理論的にも学びたくて、実践もしたい方にお勧めかもしれません。
ただし、初心者本ではないので、そこに注意が必要かも。

2008/11/14

[oracle]実行履歴を見る

少し前に、DBの変更履歴をみたいなーと思い、いくつか調べたので、メモ

oracleには解析用のLOGMINERという標準にツール
が用意されているらしい
アーカイブログモードで起動されていることが
前提だす

via:oracle SQLの実行履歴 LogMiner

ということで、このブログを参考にすると、v$databaseでアーカイブの状況を確認し、v$archived_logでアーカイブログファイルの場所をつきとめているのですが、LogMinerというのを初めて知りました。

アーカイブログファイルまでの場所をつきとめることはできたのですが、そこから先、わからなくなって断念。

詳しいことは、ここにも書かれているので、今度は、ちゃんとできるようにしたいなと。

2008/11/13

[gears]sqliteのオブジェクトを取得する

gearというよりも、sqliteの仕様なのだが、objectを取得したい場合、sqlite_masterを使って取得することができます。

select * from sqlite_master;

を実行すれば、以下のカラムをゲットすることができます。

type|name|tbl_name|rootpage|sql

typeと、sqlはわかるのですが、nameとtbl_nameの違いがわからない。。。
rootpageってどこからのルートなのでしょうか?

個人的には、create tableを最初にしたときに、できたtableのroot pageを1とし、次にcreateをしたときは、2とindexのような働きをするのかなと思っています。

この辺は間違っている可能性があるので、間違っていたら、また訂正しようと思っています。

2008/11/12

[javascript]引数の数が超多い時

たまーに人のソースを見ているとき、こんなファンクションに出くわすときがあります。


<input type="button" value="Run"
onclick="lf_test(1,'hoge','foo','',4.5)">
<script type="text/javascript">
function lf_test(a1,a2,a3,a4,a5){
alert(a1);
}
</script>

これ!!修正する度に、引数を追加しているっぽいんだけど、何十回も修正を加えていくと、そのうち、引数が膨大な数になってメンテナンスが大変になると思います。
そこで、この場合、引数を追加しなくても、下記でいけると思うのですが。。。

<input type="button" value="Run"
onclick="lf_test(1,'hoge','foo','',4.5)">
<script type="text/javascript">
function lf_test(){
alert(arguments[0]); //0~4までの数字
}
</script>

上にあとは、コメントをつけておけば、別に引数が何個増えようがおかいなしなので、OKみたいな。

2008/11/11

[java]dosでできるオプション

だいぶ前、eclipseを入れる前の話ですが、dosでjavaを実行する際に、色々なオプションをつけて実行できるみたいなのですが、どんなオプションがあるのか調べてみることに。

孫引きになってしまいますが、最初、ぐぐっていたら、こちらのサイトに直撃し、記事を読むと、さらに、ここにリンクが貼ってあって確かに、オプションの一覧がありました。

知らないオプションまみれだったなー。

2008/11/10

[php]変数同士の連結

変数同士の結合といってもいいのかもしれませんが、仮に、

$hoge = "冬と言えば、、、";
$foo = "スキー";

とあった場合、これをつなげて表示したい場合、このサイトを参考にすると、文字列.変数と同じように、

print($hoge.$foo);

でいけるみたいです。

これを知らなくて意外に苦戦してしまいました。

2008/11/09

[java]ガベージコレクション関して一言

さっきのOB・OG会で、ちょっと先輩と議論してしまったのが、
「C言語には、ガベージコレクションがあって、Javaにはない」ということ。
(なんちゅーネタ話ているんだよ)

上のように思い込んでいたら、先輩から、

「Javaにはあるが、C言語には、ない」とおっしゃって、あれー??と思い、いったんはその場で納得したものの、やっぱり気になるので、少し調べてみることに。

wikipedia先生より、

ガベージコレクションは、Java言語のように言語処理系に組み込まれたものと、C言語のように言語処理系には存在しないがライブラリを使用することで実現できるものがある。


via:ガベージコレクション

がーん、やっぱり、先輩が言っていたことがただしかったんだー。
と後で、きちんと謝ろうっと。

ちなみに、このガベージコレクションですが、概念は、schemeでも学ぶことができます。
というか、後日、エントリー書きたいなー。
ここら辺は、すごく大切な概念だと思うので。

まだ、SICPを読破していないので、ひょっとしたら、先々に環境操作がでてくるのかも。

2008/11/08

[思い出]研究室のOB・OG会に参加

およそ2年半ぶりに研究室のOB・OG会に参加しました。

教授とは、卒業式以来お会いせず、以後、何も連絡をとっていませんでした。
だって、あんまり仲良くなかった(??)と思っていたから。

しかし、今日、参加してみると、昔のことは、水に流したような感じで、お互い普通に話すことができました。

教授には、色々とご迷惑をおかけしたので、最初に、「いろいろとその節は、ご迷惑をおかけしました。」と言って、悪かった気持ちを伝えたので、それがよかったのかも。

というかまずは、その気持ちを伝えたかった。

卒業式の時に、教授に一礼をして、伝えたのですが、何か物足りないような気がして、ずっと何かもやもやしている感じがありました。

なので、この場を借りてきちんということができてよかった。

先輩にもお話できて楽しかったです。
いろいろなところで就職されているので、話を聞いていてすごく楽しかったです。
得るものもすごく多かったです。

ただ残念だったのが、もっと色々な先輩が来るのかと思ったのですが。
まぁー来年はもっとくるといいなーと。

2008/11/07

[html][css]IEをクラッシュさせる方法2

前回、[JavaScript]IEをクラッシュさせる方法で、webページを開けた瞬間に、IEが強制終了する方法をかきました。

が!!今回、またあらたにクラッシュさせる方法をたまたま発見しておもしろかったので、紹介したいと思います。

<style>*{position:relative}</style><table><input></table>

via:IEを華麗に撃墜する一行

前回と違って今回は、htmlとcssのみで、撃墜できるらしいのですが、実際に試してみると。


わー。IE6で試したけど、本当に、落ちたわ!!。

是非、お時間のあるかたは。
でも、本当に、ウィンドウクローズしちゃうからね。

2008/11/06

[asp]サーバーサイドで処理をとめる

突然、先輩社員から質問されてびっくりしたのですが、aspでサーバーサイドで処理をとめたいと時に使うのは、Response.end()でとめます。

2008/11/05

[php]リファラーチェック

リファラーチェックのやり方を調べました。

PHPでリファラを取得したいです。

via:Hatena::Question

まさに、知りたかったのは、これです。

$_SERVER[”HTTP_REFERER”]
でしょうか

via:Hatena::Question

すごいこんなにあっさりわかってしまった。

これでリファラーチェックができそうです。

2008/11/04

[php]文字列検索

文字列内に、ある文字列が存在しているかどうか確認したかったので、調べてみることに。

文字列を前から検索するには、strstr 関数を使います。
$str = "PHPプログラムとJavaプログラム";
$p = strstr($str, "プログラム");

$p は "プログラムとJavaプログラム" になります。

via:文字列を前から検索する

上のサイトによると、strstr関数は、検索文字列を発見したら、発見した場所から最後までの文字列を返し、見つからない場合、falseを返します。

ということで、こんな感じで、文字列を含んでいるかどうか確認できるかなと。

// 文字列が発見できなかった場合の処理
if(strstr($hoge,"foo") == false){
・・・・
// 文字列があった場合の処理
}else{
・・・・
}

2008/11/03

[design]Web 2.0的なロゴを作ってくれるLogoCreatr

そろそろ、デザインに本腰を入れないとと思いつつ、以前、ブックマークしておいた、デザイン系のサイトを一つずつみていくことに。

またかよ・・・という方もいらっしゃるかと思いますがw、Web 2.0風のロゴジェネレーターをご紹介。
いろいろ設定できて便利ですよ。

via:Web 2.0っぽいロゴがさくっと作れる『LogoCreatr』

というわけで、LogoCreatrというサイトが紹介されていました。

習うより慣れろ方式で実際に使ってみました。

Photobucket
他にもいくつかパターンがあって、パラメータを指定することによってさらに細かい設定を行うことができます。

ちなみに、上のロゴは、下の設定で行いました。

Photobucket

他にもgoogleっぽいロゴなどがあります。

Photobucket

ロゴに困ったときに重宝しています。

2011年08月05日追記
Simple*Simpleにも、Web 2.0っぽいロゴがさくっと作れる『LogoCreatr』
が紹介されていました。

2008/11/02

24 Redemption

シーズン6とシーズン7をつなぐ24 Redemptionがいよいよ今月DVDでリリースされるようです。

ちょっとぐぐったら、foxのサイトに動画を発見したので、のせちゃいます。

今度の、ジャックはアフリカに出没するのですが、なぜアフリカ??


というか、シーズン6を見終わってからかなりの時間がたってしまっているので、ちょっと内容を忘れ気味。
と言っても、めんどくさいから、また見直すこともないと思うんだけど。

果たしてジャックは、いったい何をするんだろうー。
そして、今回は、24話ではなく、2時間の単発ものなので、どのように物語が進行していくのかすごく楽しみです。

2008/11/01

[mysql]コメントに関して

mysqlのsql文のコメントってどうするんだろーと調べていたら回答が見つかりました。

mysql> SELECT 1+1; # このコメントは行末まで続く
mysql> SELECT 1+1; -- このコメントは行末まで続く
mysql> SELECT 1 /* これは行中コメント */ + 1;
mysql> SELECT 1+
/*
これは
複数行コメント
*/
1;

via:6.1.6. コメント構文

このへんはoracleと変わらないんだなー。