subversion
いつのまにかデフォルトがfsfsタイプになってた。
解読不能な暗号
暗号って、受け取って読む側がいるものなので、なんらかの復号手段があるわけですよね〜
http://www.atmarkit.co.jp/news/200804/11/cab.html
http://www.atmarkit.co.jp/news/200804/14/weekly.html
解読困難やほぼ無理、ではなくて解読不能とのこと・・・
解読不能ってセンセーショナルなことを言い切るのであれば、やっぱり裏を取ったほうがいいと思います。
記事を見た瞬間このサイトがよぎりました。 ⇒ http://www.realcreate.net/
expose_php=On
レスポンスヘッダへのPHPクレジットだけじゃなくEaster Eggsとかも出ちゃうんですね。
(Easter Eggsというか、phpinfoの画面から呼ばれる画像など)
https://www.webappsec.jp/modules/bwiki/index.php?PHP%20Easter%20Eggs%20%A4%F2%BB%C8%A4%C3%A4%BF%A5%D0%A1%BC%A5%B8%A5%E7%A5%F3%BF%E4%C2%AC
http://shiflett.org/blog/2006/feb/php-easter-eggs
http://ryouchi.seesaa.net/article/37629160.html
こういうのがデフォルトOnになってるらしいです。
マニュアルを見てもなんだか釈然としないです。
http://jp.php.net/manual/ja/ini.core.php
expose_php boolean
(例えば、Web サーバヘッダに PHP のサインを追加することにより、) PHP がサーバにインストールされていることを表示するかどうかを 指定します。これは全くセキュリティ上の脅威ではなく、サーバ上 で PHP を使用しているかどうかを調べられるようにするものです。
expose_php = Off がデフォルトにならないかなあ・・・。
コンソールから毎回SET NAMESが面倒なので
オプションファイル(~/.my.cnf)に設定を書いておくのがいい気もしていますが、ついでにホスト名とかも入れるのが面倒なので、
#!/bin/bash mysql -u hogeuser -phogepass -h hogehost -P hogeport --default-character-set=ujis hogedb
を ~/bin/myhoge とかにしておいて(~/bin/ にPATHを通しておいて)、コマンドラインから myhoge だけで接続できるようにしています。いろんな意味で手抜きです。
ADODBセッションでmysqliを使いたい
↓ADODBセッション
http://phplens.com/lens/adodb/docs-session.htm
要は
include_once("adodb/session/adodb-session2.php"); ADOdb_Session::config( $driver, $host, $user, $password, $database, $options = false ); session_start();
でPHPのセッションデータがDBに保持されるので、webが複数サーバに分散しているときなどは便利です。
対応しているdriverについては、mysql, postgres, oci8 あたりであろうことは想像がつくのですが、特に明記されていません。(ソースを見ると、oci8po, oracle, oci805あたりもいけそう、pdo_* は想定してなさそう。※未検証)
また、デフォルトじゃないポートで立ち上がったMySQLに対してmysqli接続ができませんでした。理由は↓と同じです。
http://d.hatena.ne.jp/yoshihi6/20080201/1201837964
mysqliも想定してなさそうです。
mysql接続のほうは、文字コードセット云々のため使いたくないし、セッション用に別途mysql接続を用意するのも微妙なので、困りました。
解決策として、強引に
$GLOBALS['ADODB_SESS_CONN'] =& $conn; // 接続済!
で一見何とかなった風にはなりますが、adodb-session2.php のソースを見たところ、mysql独自の処理が挟まっているので、念のため以下の対処をしました。
・・・
そもそもこれ使っている人ってあまりいないんですかねえ。
EthnaでDBセッション使うと session_save_handler の前で接続が切られてしまったり等もあり、memcachedとか、データをNFSで共有とかが主流なのかなあと感じました。
ADOdbのmysqlとmysqli 接続について
違いは、中で mysql_* を使ってるか mysqli_* を使ってるかなのですが、実際使ってみて気になった点をまとめておきます。
- mysqliで旧バージョンのやり方による接続が、場合によってちょっと厳しい
昔からある接続方法ですが、
$conn = ADONewConnection('mysqli'); $conn->Connect( 'hogehogehost', 'hogehogeuser', 'hogehogepass', 'hogehogedbname' );
です。
ADOdb 4.51からは、DSNを渡す形での接続も可能になっていて、上記の接続は
$conn = NewADOConnection('mysqli://hogehogeuser:hogehogepasss@hogehogehost/hogehogedbname');
とすることも可能です。
上記の "mysqli" を "mysql" に変えれば、mysqlドライバで接続できます。
ここまでは特に問題ないのですが、
デフォルト以外のポートで立ち上がっているDBに、mysqliで繋ぐ場合、旧バージョンのやり方ではできませんでした。
mysqlの場合(13306番でつなぎにいくとします)
$conn = ADONewConnection('mysql'); $conn->Connect( 'hogehogehost:13306', 'hogehogeuser', 'hogehogepass', 'hogehogedbname' );
でOKですが、これをmysqliでやるとエラーになってしまいます・・・
- mysql_connect の第1引数であるホスト名に、ポート番号も含める形で指定することが可能
- mysqli_connect の第1引数であるホスト名には、ポート番号を含める形で指定することは不可能で、ポート番号は第5引数で渡す
という違いが吸収しきれていないためとおもわれます。
DSNのほうで接続していれば問題ないので、なるべくDSNを使うようにしたほうがよさそうです。
PHPから SET NAMES ujis はやらない
http://d.hatena.ne.jp/yoshihi6/20070726/1185414880
$db = &ADONewConnection( 'mysql' ); $db->Connect( (DB名とかパスワードとか) ); $db->execute( '/*!40101 SET NAMES ujis */' );
⇒ mysql3〜5で動く!
ということを書きましたが、よくない方法でした。極力やらないほうがいいです・・・
このあたりが理由⇒http://blog.ohgaki.net/index.php/yohgaki/2007/08/22/set_namesa_mcb_asc
文字コードの指定はmysql3〜5、PHP4〜5で動くコードはあきらめて、
- mysql_set_charset() をつかう(PHP5.2.3以降)
- mysqli_set_charset(), mysqli->set_charset() をつかう(PHP5.0.5以降)
のどちらかにしたほうがいいです。
※mysql3は、切り捨てる。(というか別途コードを書けばいい)
adodbだと、PHP5対応版のmysqli接続に SetCharSetメソッドが実装されてたのでこれを使うのが見栄えがよいかもです。
$db = &ADONewConnection( 'mysqli' ); $db->Connect( (DB名とかパスワードとか) ); $db->SetCharSet( 'ujis' );
adodb mysqli の接続について気になりだしてきたのでまた今度書きます。