画像の拡張子
PHPでCMSを作る場合、画像をアップロードして反映させる機能を作ることも多い。その際どんな風に作るのが一般的なんだろうか、と疑問に思ったので、現在の自分の作業をメモしておくことにする。
- アップロードされたファイルの形式をチェックする
画像かどうかのチェックは必須とする。 - ファイルの拡張子なしで保存する
拡張子なしのファイル名で画像を保存する。PCブラウザは、拡張子なしでもだいたい対応してくれるので。
PHPでCMSを作る場合、画像をアップロードして反映させる機能を作ることも多い。その際どんな風に作るのが一般的なんだろうか、と疑問に思ったので、現在の自分の作業をメモしておくことにする。
XREAで携帯向けコンテンツの提供を始めようとしているのだが、なぜか表示が遅い。すごく悩んでいたのだが、ようやく原因がわかった。原因は「携帯向けGoogle Adsense(PHP版)を貼り付けていること」だった。
最初は何が悪いのか全くわからなかった。とにかくリクエストから表示まで10秒くらいかかってしまう。どこがボトルネックになっているのか調べようとして、実際にやってみた作業はコレ。
スクリプトにやたらめったらprint(microtime(true));を記述
この記述がある回数だけ時刻が表示されるわけだが、その差が大きい部分を追うことで、実際にボトルネックになっている箇所を見つけるわけだ。で、追っかけてみた結果、Smartyテンプレート内で「include」している箇所で時間がかかっていることがわかった。「え〜なぜ?」と思いつつ、更に調べてみてincludeされているファイル内に記述されているGoogle Adsense携帯版の記述がボトルネックになっていることがわかった。
そこで「そういえばGoogle Adsense携帯版の実際に記述するコードが、最近やたら長くなったよな」と思い出したので、昔使っていたコードを入れてみた。そしたらなんと動作しない!。Google Adsense携帯版は以前は単にGoogleに配置されているファイルをrequireしているだけだったのだが、そもそもその記述自体がXREAでは許可されていないのだ。つまり「そういうこともあるからGoogle Adsense携帯版のスクリプトが長くなった」らしい。
ということで、副産物的にGoogle Adsense携帯版のことがわかったのだが、結局Google Adsense携帯版は、XREA環境ではどうやっても遅いのだ。仕方なく広告を削除した。
さて、改善されないのか・・・XREAにリクエストを出さねば・・・。
携帯でセッション持ち回りをする際の設定メモ。
○session.use_cookies => 1
セッションでクッキーを使うかどうかの設定。
デフォルトは1。
PHP_INI_ALL。
○session.use_only_cookies => 0
セッションをクッキーだけに頼るかどうかの設定。
デフォルトは1(クッキーが使えなければセッションも使えない)。
PHP_INI_ALL。
○session.use_trans_sid => 1
セッションIDをHTML中のURLに付加するかどうかの設定。
デフォルトは0。
PHP<=4.2.3でPHP_INI_ALL。PHP<=5でPHP_INI_PERDIR。
最近の環境ではPHP4.4系以上が多いので、基本的にhtaccessで設定することになる。htaccessでの設定ができない場合は何らかの代替手段を用意する必要あり(もちろん代替手段を検討する前にphp.iniのデフォルト設定で確認しておくこと)。
Google Maps APIはJacaScript/Ajaxを活用した技術だから、同然携帯では使用することができる(携帯ではJavaScriptが動かないという前提だが)。しかしGoogleはいつの間にか、やってくれていた。ついに携帯でも地図を表示させることができる。
グリグリと地図を動かすことはできないけど、一枚の画像として画像を呼び出すことができるようになっている。HTML中にimgタグを使ってRESTで呼び出せばいい。RESTの形式はこんな感じ。
http://maps.google.com/staticmap?
center=[中心の緯度],[中心の経度]
&zoom=[倍率(ズームレベル)]
&size=[出力する画像の横ピクセル]x[出力する画像の縦ピクセル]
&maptype=[mobile / roadmap]
&markers=[マーカー緯度],[マーカー経度],[色][マーカーのアルファベット]
&key=[APIキー(Google Mapsと共通)]
住所からダイレクトに地図を表示することはできないけれど、緯度経度をなんとか用意できれば大丈夫。さっそく使うことにしよう。
携帯からのアクセスを振り分ける場合、やり方としては大きく分けて2つある。
お手軽なのはUSER_AGENT(ブラウザ)をみて振り分ける方法だ。新機種が出るごとに一応チェックの必要はあるのだが、まぁ一般的に使われている方法だ。
if(strstr($_SERVER[‘HTTP_USER_AGENT’],”DoCoMo”)){
//ドコモ
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”Vodafone”)){
//ソフトバンク
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”SoftBank”)){
//ソフトバンク
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”MOT-“)){
//ソフトバンク
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”J-PHONE”)){
//ソフトバンク
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”KDDI”)){
//AU
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”UP.Browser”)){
//AU
}elseif(strstr($_SERVER[‘HTTP_USER_AGENT’],”WILLCOM”)){
//Willcom
}else{
//PC
}
こんな感じか。ただしPCからのアクセスではブラウザのUSER_AGENTを書き換えてしまうこともできるので、そういう場合はたとえPCからのアクセスであっても携帯とみなされる。
別の方法として、アクセスもとのIPで判別する方法だ。こちらは$_SERVER[‘REMOTE_ADDR’]で判断する。IPアドレスは各キャリアのサイトで公表されているのでそこを参考にするわけだが、変更もあるようなのでこちらも時々チェックする必要があるだろう。IPアドレスが公表されているページは以下の通り。
しかしまぁ、一番端末が多いドコモのIPアドレスが一番少なくて、一番端末数が少ないWillcomのIPアドレスが一番多いとは・・・(イーモバイルはちょっと例外ということで)。
こちらの難点は、たとえばi-mode simulatorなどのPCで携帯端末の画面表示をチェックするようなツールは使用できなくなることだ。これらのソフトはキャリアの回線を通らないので、当然IPアドレスが上記のようにはならない。
はてさて。どちらがいいのやら。
どうも最近いただいたコメントを読む限り、USER_AGENTをチェックして、キャリア判別だけでなく機種判別まできっちりやる必要があるようなのだが・・・。仕事の重要度と金額によるかな。
何も考えずにPEARの携帯判別ライブラリを使って「後は知りません」といってしまうのが、ある意味いいかもしれない(無責任モード)。