Authentication




Cancel OK
B!コメントする  2011-05-02 01:34:00 by old

CodeIgniter2.0.1へ移行完了

CI 1.7.2では複数のファイルアップロードに対応していないと書いてしまいましたが、
さらに調べて見たら普通に出来ることがわかりました。
出来ないと思っていたのですが、PHP側のコードミスで機能していなかっただけで、修正したらいくらでもいけることがわかりました。
そこはサクッと修正しつつも、ついでだったのでCI 1.7.2から2.0.1への移行を完了しました。

さすがにこのサイトを直接いじるのはよくないので仮想環境はお手軽にそろえる事の出来るVirtualBoxで作成しました。
環境自体はWEBが動くだけのシンプルな構成で作成。

まずは、作成した環境にCodeigniter2.0.1を放り込みwelcomeページが表示されることを確認。
ここまでは良かったのです。
1.7と2.0ではフォルダの構成が変わっているのでパスの変更とかが必要になるかな?
という程度の認識でしたが、色々とWEBサーバーに足りないせいで問題が続出しました。
まずトップ画面だけを移植。
まずはこんなエラーが発生

Fatal error: Class /Controller/ not found ~~~

該当箇所はクラス継承の部分で
class Blog extends Controller
となっていたので(class Blog extends CIController
と修正。

再度、読み込むと今度はコンストラクター呼び出し部分で以下のがエラー発生
Fatal error: Call to undefined method CIController::Controller()~~

該当箇所は
parent::Controller();
となっていたので
parent::__construct();
と修正。

これでOKかと思ったら真っ白な画面が表示される・・・
どうしたことか・・・エラーすら出ない・・・。
php.iniでdisplayerrorsをonに変更すると
PHP Fatal error: Uncaught exception /PDOException/ with message /SQLSTATE[HY000] [14] unable to open database ~~

というエラーが発生・・・
これはPDOが入ってないよというエラーなんですが、脆弱性倶楽部はPDOを使ってDBを操作しているのを忘れていました。
yum でPDOを入れて問題解決と思いきや今度は別のエラーが・・・
PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of sscanf(). If you would like to enable call-time pass-by-reference, you can set allowcalltimepassreference to true in your INI file. However, future versions may not support this any longer~~

こちらも調べてみるとphp.iniの設定で引数が参照渡しされる際の警告だそうです。
確かにPDOの中で参照渡ししてるところありましたが、こんなのデフォルトでOFFにしとけよな。
ということでphp.iniの
allow
calltimepass_reference
をoffにして問題は解決・・・。
次はどんなエラーが出るんだろうと思ったら以外にもこれで終了。
トップページが正常に表示されるようになりました。
念の為に別ページも同じ要領で移植してみましたが問題なく終了。
サーバーの設定さえちゃんとなっていれば

クラス継承・コンストラクター呼び出し・ソース内の相対パスの変更

この3つだけで2.0への移植が出来ました。

意外と簡単にバージョンアップが出来てしまいました。


CodeIgniter  

  • コメント
  • コメントはまだありません