サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
www.programming-magic.com
ループの中にループがあるような多重ループを抜ける場合には、C言語ならgotoを使ったり、PHPなら数値指定付きのbreakを使ったり(『多重ループを抜ける[PHP]』参照。)と特殊な方法を使うことがある。 JavaScriptでは、goto文もbreak文で数値を指定することもできないが、Javaと同じようにラベル指定付きのbreak文を使うことができる。 例えば、以下のように変数を使って2回breakしているコードがあるとする。 var break_flag = false; //多重ループから抜けるためのフラグ for(var i=0; i<5; i++){ for(var j=0; j<5; j++){ document.writeln("("+i+", "+j+")"); if(i == 2 && j == 4){ break_flag = true; break; } } if(
PHPでエラーが発生したとき、どのファイルの何行目でエラーが発生したかなどは表示されるためにすぐにわかることだが、そのエラーが自作関数の中で発生した場合、その関数がどこから呼ばれたのかを知りたいことは多い。 開発環境によっては、なんらかのソフトウェア(Zend Studioなど)の機能でそれを調べることができることもあるが、できないこともある。 実は、バックトレース(呼び出し履歴)はPHP標準の関数で表示させることができる。 表示させるだけならdebug_print_backtrace関数、配列データで取得したいならdebug_backtrace関数を使う。 <?php function test1($number){ test2($number * 3, 'これは引数です。'); } function test2($string){ print "エラーが発生しました。\n"; prin
PHPの標準関数はエラーが発生したときに文字列を表示してそれを知らせるものがあるが、詳しいエラー内容をユーザに見られてしまうと、そこから内部仕様がばれて攻撃を受ける恐れがある。 そこで、表示するエラーレベルの設定を変えることで、簡単に表示・非表示を変えることができる。 表示するエラーレベルの設定を変えるには、php.iniや.htaccessなどでerror_reporting の値を変える方法と、error_reporting関数を使う方法などがある。このとき、httpd.confや.htaccessなどのPHP外部でerror_reportingの値を設定する場合には、E_ERRORなどの定義済み定数は使えないことに注意する必要がある。 # エラー表示をOnにする php_value display_errors 1 #「E_ALL & ~E_NOTICE」を設定 php_value
「hoge○○hoge○○○○hoge○○hoge○」という文字列があり、PHP+正規表現で行頭以外にあるhogeを全てHOGEに置換して、「hoge○○HOGE○○○○HOGE○○HOGE○」としたかったのだが、やり方がよくわからなかった。 行頭にある「hoge」マッチする正規表現であれば以下のように簡単に書けるが、行頭以外にあるhogeにマッチする正規表現がわからなかったのでいろいろと試してみた。 preg_replace('/^hoge/', 'HOGE', $text); まず浮かんだのは、戻り読み言明を否定する方法だったが、どうも戻り読み言明のなかで行頭を意味する「^」は使えないらしい。 preg_replace('/(?<!^)hoge/', 'HOGE', $text);
MySQLでは以下のようなクエリーでカラムを削除する。 ALTER TABLE <テーブル名> DROP <カラム名>; ALTER TABLE test DROP flag; ALTER TABLE test DROP number; ALTER TABLE sample DROP address; 以下のようなクエリーで同時に複数のカラムを削除することもできる。 ALTER TABLE <テーブル名> DROP <カラム名>, DROP <カラム名>, ....; ALTER TABLE test DROP login_name, DROP comment; ALTER TABLE sample DROP regist_time, DROP status_id;
JavaScriptとPHPではそれぞれURLエンコード、デコードする関数を持っているが、それぞれ微妙に動作が違う。 URLエンコードする関数は、PHPには、rawurlencode関数、urlencode関数の2つがあり、JavaScriptには、escape関数、encodeURI関数、encodeURIComponent関数の3つがある。 それぞれのエンコード関数とデコード関数の組み合わせでどうなるのかを調べてみた。 JavaScriptとPHPのURLエンコード動作検証(ソース表示) 注目すべき点は以下の4つ。 urlencode関数が半角スペースを「+」に置換する escape関数だけが2バイト文字を他と違う文字に置換する encodeURI関数は置換する文字が少ない escape関数+(decodeURI関数 or decodeURIComponent関数)で2バイト文字はエラ
formからデータを送る方法にはGETとPOSTの2種類がある。 基本的にはその2種類のどちらかしか使わないが、formのaction属性に指定するURLを書き換えることで、GETとPOSTの両方を同時に送ることもできる。 <form action = "?test=1234&name=Fermat" method = "POST"> <table> <caption>GETとPOSTを同時送信</caption> <tbody> <tr><th>年齢[age]</th><td><input type = "text" name = "age" value = "45"></td></tr> <tr><th>名前[name]</th><td><input type = "text" name = "name" value = "Gauss"></td></tr> </tbody> </ta
SQLで以下のようにテーブルを結合すると、どちらか一方にNULLを含んだデータや一方にデータが存在しないものは結果として出てこない。 SELECT * FROM a,b WHERE a.id = b.id SELECT * FROM a JOIN b ON (a.id = b.id) この結合を内部結合(INNER JOIN)という。 例えば、以下のようなデータがあったとする。 > SELECT * FROM user; +----+-----------+ | id | name | +----+-----------+ | 1 | トム | | 2 | 太郎 | | 3 | エイダ | | 4 | 鈴木 | +----+-----------+ > SELECT * FROM access_log; +----+---------+---------------------+ | id
※比較の結果としてtrueが返されるところに○、falseが返されるところに空白( )を出力している。 ※JavaScriptでマウスがある行、列に色を付けて表示している。 緩やか比較(= =) true false 1 1.0 "1" "1.0" 0 0.0 "0" "0.0" -1 -1.0 "-1" "-1.0" null array() array(1) array(0) array(null) "" "php" "true" "false" "null" NAN INF true
mysqlコマンドでも調べることができる。 >mysql --version mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (i486) using readline 5.2 さらに、「mysql -u -p 」で接続すると表示される。 >mysql -u user -p test Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.0.32-Debian_7etch1-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
PostgreSQLにはランダムな数値を取り出すRANDOM関数があり、これを使うことにより、テーブルからランダムにデータを取り出すことができる。 RANDOM関数は以下のように0以上1未満の値をランダムで返す。 > SELECT RANDOM(); random ------------------- 0.322386509888985 (1 row) > SELECT RANDOM(); random ------------------- 0.677151894977853 (1 row) これを使ってランダムにデータを取り出す。 例えば、以下のデータがあるとする。 > SELECT * FROM book; id | title ----+---------------------- 1 | 赤ずきん 2 | ブレーメンの音楽隊 3 | 白雪姫 4 | シンデレラ 5 | ヘンゼル
AUTO_INCREMENTの値をリセットするには以下のようにALTER TABLEでできる。 ALTER TABLE <テーブル名> AUTO_INCREMENT = 1; ALTER TABLE test AUTO_INCREMENT = 1; ALTER TABLE sample AUTO_INCREMENT = 1; このとき、AUTO_INCREMENTの付いたカラムに1以上の値を持ったレコードが存在すると、その値以下には設定できない。 例えば、以下のようなデータがあると5以下には設定できないが、6以上には設定できる。 > select * from newspaper; +----+--------+ | id | name | +----+--------+ | 1 | 毎日 | | 2 | 読売 | | 3 | 毎日 | | 5 | 日経 | +----+--------+
PHPは、プログラムをHTMLの中に埋め込むように書くことができるというのが利点の一つである。 単純にHTMLに文字を出力するコードを埋め込む場合、以下のように書く。 <?php echo 'xxxx'; ?> これは、short_open_tagの設定がonになっていると、以下のように書くこともできる。 <?= 'xxxx'; ?> さらに、最後の「;」を省略して以下のように書くこともできる。 <?= 'xxxx'?> ただし、以下のように書くことはできない。 <?php= 'xxxx'; ?> この省略記法は便利ではあるが、short_open_tagをonにすることで、 <?xml version="1.0"'; ?> などがphpコードと認識されてしまうため、わざわざ以下のように書かなければならなくなる。 <? echo '<?xml version="1.0"?>'; ?> また
「PHP 省略できる参照渡しの引数 - JE no hitori chat」によるとPHP4.4.2では、参照渡しの引数にデフォルト引数を設定して、引数を省略することはできなかったらしい。こんなこと試したことがなかったので、PHP4.4.4とPHP5.2.0で試してみた。 以下のように、参照渡しの引数にデフォルト引数を付けた関数をテストしてみる。 <?php //参照を引数に取る関数 (省略可) function test(&$arg = null){ echo '<div>function: test($arg)</div>'; if($arg == null){ echo '<div>引数は省略されました。</div>'; } else{ echo "<div>\$arg: $arg</div>"; $arg = "「{$arg}」は変更されました。"; } } //初期状態 $str
会員制の掲示板のように、ユーザが登録し利用するWebサービスを提供する場合、認証のためにユーザのパスワードを保存・管理することが多い。 このとき、パスワードを平文で保存(暗号化などをせずにそのまま保存)していると、管理者や開発者などにはパスワードを見ることができてしまう。 管理者や開発者に悪用する気がなかったとしても、パスワードの漏洩などにより誰かに悪用されてしまう危険性がある。 その対策として、パスワードを暗号化するという手もあるが、復号されてしまう危険性もある。 そこで、パスワードをmd5やsha1のような不可逆な変換(変換したものから元に戻せない変換)をして保存する。 認証のときには、「md5(sha1)で変換して保存したパスワード」と「入力されたパスワードをmd5(sha1)で変換したもの」を比較して一致するか調べる。 これで仮に変換して保存したパスワードが漏れたとしても、不可逆
ユーザのブラウザの種類を判別する情報として、以下のようなユーザエージェント名が取得できるが、これを見ても知らなければ詳しい情報がわからない。 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Sleipnir/2.6.1 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Mozilla/5.0 (Macintosh; U; Intel Mac OS X; ja-jp) AppleWebKit/523.12.2 (KHTML, like Gecko) V
次のページ
このページを最初にブックマークしてみませんか?
『Programming Magic is under construction』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く