CakePHPで開発してて、管理画面(admin)へのアクセスはIPで制限したいな
という場合の設定方法
昔、componentとか駆使して設定したことがありますが、もっと簡単な方法がありました。
htaccessを使う方法です。
/webroot/admin のディレクトを作ります。
そのadminディレクトリにhtaccessを置きます。
order deny,allow deny from all # 許可したいIP allow from 1.0.16.0
Webシステムに関することを中心に書いてます
CakePHPで開発してて、管理画面(admin)へのアクセスはIPで制限したいな
という場合の設定方法
昔、componentとか駆使して設定したことがありますが、もっと簡単な方法がありました。
htaccessを使う方法です。
/webroot/admin のディレクトを作ります。
そのadminディレクトリにhtaccessを置きます。
order deny,allow deny from all # 許可したいIP allow from 1.0.16.0
CakePHPで開発中、ある特定のURLの場合のみ404エラーが発生しました。
一意のURLを生成するためにbase64_encodeなどを駆使して生成したURLで発生。
色々調べてみると…
base64の使用文字
「a-zA-Z0-9+/」
この最後の「/」が問題のようだ。
urlencodeして使用していたけど×
mod_rewriteでURLに「%2F(スラッシュをurlencodeした文字)」が入っていると404を返すらしい。
それを解決するには、「AllowEncodedSlashes On」にすると解決できるそうだ。
これはデフォルトだとOffになっているため、先に%2Fをスラッシュとして認識し、URLが見つからないと404を返すと。。
んじゃ、Onにして解決だね!
と言いたいところだけど、それはちょっと難しい。
これはApacheの設置httpd.confなどで設定するものらしい。
htaccessでは解決できない。
レンタルサーバーなどでは簡単に変更できないので詰んでしまう・・・・
ということで、私は単純にqueryでgetとして送信することで回避させました。
https://zero-one-x.com/xxxx%2Fxxx
↓↓↓↓
CakePHPでDBはPostgreSQLのサイトがある。
そちらを移転作業したときに起きた問題
動作チェック中に下記のエラーが発生
Query failed: ERROR: operator does not exist: date ~~ unknown HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
HINTから情報を検索するとPostgreSQLのバージョンで検索(Where)のキャスト(型)のチェックが厳密化されたようです。
今回はPostgreSQL7.4.23 → 9.2.10
厳密化は8.3からのようです。
キャストの厳密化とは検索するときにフィールドの型を厳密にチェックするようです。
今までのバージョンは型を自動で変換してくれていたようですが、8.3からはそれを行わないとのこと
WHERE field_int = '1' // int型に文字列を投げるとか WHERE field_text = 1// text型に数値をなげるとか
それらがNGとのこと
私のプログラムのエラーはdate型にLIKE検索をしているのがNGでした。
対策としてはFunctionとCastを作成してそれで型の変換をさせる方法があるようですが、
次の移転時にまた困るような気がしたので、今回はプログラム側の修正を行いました。
(プログラムの修正箇所が少なかったため)
CakePHPを使っているのですが下記の修正ではエラーでした。
array(“date::text”=>”2017-11%”)
ということで、ちゃんと関数で変換します。
array("to_char(date, 'yyyy-mm')"=>"2017-11")
エラーなく検索結果が返ってきたらOK
サーバー移転時に起きたエラー
PHP5.3→5.6になったのが原因なのかな。
Strict Standards: Redefining already defined constructor for class Object in /home/***/cake/libs/object.php on line 63 Strict Standards: Non-static method Configure::getInstance() should not be called statically in /home/***/cake/bootstrap.php on line 47
CakePHPのバージョンが1.2.5
PHP5.4からエラーレベルE_ALLにE_STRICTが含まれたのが原因です。
CakePHPはプログラム上でerror_reportingを行っているので、php.iniやhtaccessで変更しても×なのです。
修正するにはCakePHPのプログラムを直すということになります。
修正するのに若干手間がかかるので、私は下記の対応をしました。
CakePHPのバージョンアップ
1.2.5 → 1.2.18
バージョンアップの方法はcakeフォルダをまるごとごっそり入れ替えるだけです。
これでエラーがなくなりましたとさ。
CakePHP 1.2.18
携帯の絵文字変換のコンポーネント、ヘルパーで「Ktai Library for CakePHP1.2」を使っていました。
サーバー移転をしたときに動作しなくなったので、その修正記録
Ktai Libraryのバージョンは0.2.0
(2017/11時点の最新版は0.4.2です。)
auでの絵文字変換がうまくいかない。
バージョンアップも考えたが、色々変更点があって修正対応に時間がかかりそうだったため
0.2.0を修正することにした。
処理の流れとしては下記のような感じ
1.docomoの絵文字を退避
2.文字コード変換
3.docomoの絵文字をauのバイナリ絵文字へ変換
文字コードの変換はうまくいっているが絵文字でNGで文字化け
PHPの文字コード設定は下記
ソースはUTF-8
表示はSJIS
vendors/ecw/lib3gk.php
ソースを追ってみる。
755行目あたり
if($output_encoding == KTAI_ENCODING_UTF8){ if($carrier == KTAI_CARRIER_KDDI && $binary){ $oekey = 2; }else{ $oekey = 1; } }else{ $oekey = 0; }
出力がUTF-8、KDDIなら処理になっている。
こちら側の出力はSJIS
フィーチャーフォンはUTF-8表示は一部端末のみ
ということでこちらを修正(2箇所)
# if($output_encoding == KTAI_ENCODING_UTF8){ if($output_encoding == KTAI_ENCODING_SJIS){ if($carrier == KTAI_CARRIER_KDDI && $binary){ $oekey = 2; }else{ # $oekey = 1; $oekey = 0; } }else{ $oekey = 0; }
これで絵文字も表示されるようになった。