スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    xserverでCodeIgniterアプリを入れたら延々404に[解決済み]

    0
      正月早々ですが、また次回ハマったらいやなのでメモ。

       xserverに開発済みのCIアプリを入れて、一通りページを表示して確認していたところ、homeコントローラ配下の画面がことごとく404エラーになっていました。

      なんでなんでー?とlogレベルをdebugに変更して/index.php/home/indexと直打ちしてアクセス
      URI class initialized
      404 notfound --> index
      どうやらURIクラス初期化までOK、次のROUTERの初期化がうまくいってない(ここで404?)。

      で、system/libraries/Router.phpを見る。
      Router class initializedをログ出力する前に呼んでいるRouter::_set_routing()内で、URIクラスから渡されたURIを見てみる。…??あれ??/home/indexにアクセスしたのに/indexになってる。そりゃ404にもなる罠。

      Routerクラスを元に戻して、system/libraries/URI.phpを見る。
      URI::_fetch_uri_string()→URI::_parse_request_uri()と実際の処理部分を探して見る。
      $_SERVER['REQUEST_URI']は/home/indexが入っている。OK。
      その次、$fc_pathというのと$_SERVER['REQUEST_URI']を/でexplodeしたものを比較して、array_sliceしている。ここアヤシイ!!
      $fc_pathってなに?と値を見てみたところ、index.php(フロントコントローラ)のパスが入っていました。
      要するに、xserverのドキュメントルートのパスが/home/hogehoge/public_htmlのようになっているのに、デフォルトコントローラ名としてhomeを使ったのが原因。CIアプリをドキュメントルートでなく物理フォルダを切って配置した場合に対するCI側の対策が仇になっていた。
      とりあえず、今回のブツは他へ移植する予定のないアプリなので、$fc_pathとの比較&array_sliceしている箇所をURI.php内で勝手にコメントアウト。

      私はデフォルトコントローラをhomeとすることが多いのですが、前回xserver使ったときはCI使い初期に作ったアプリでデフォルトコントローラはwelcomeのままだったので、これにひっかからなかった模様。
      この問題はURIルーティング方法としてREQUEST_URIを選択した場合のみ出てくるので、他の方法(PATH_INFOとかQUERY_STRING)にすれば問題ない模様。


      結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました

      0
        O/Rマッパ書かないつもりだったんですが、テーブル数が多くて1個ずつCRUD動作を書くの面倒になってきたので、結局汎用的なO/RマッパもどきとCRUD用コントローラ(list/add/edit/delete)を書きました。



        構想2時間・コーディング1時間のやっつけ品なので(汗)まだ公開できないんですが、CIのDBクラスを使ったバージョンとadodbを使ったバージョン両方作りました。
        そのうち、ちゃんと使い方のコメントとか入れてciforgeかCodeIgniterのforumに投稿したいと思います。
        ■特徴■
        ・(少なくともCIのDBクラスを使ったほうは)PHP4も対応
        ・コントローラ1個を配置、モデルファイル×テーブル数×2を手動で作って若干の設定、routes.phpの設定をちょこっとだけで基本的なCRUD動作が完成(フォームは別です↓下記参照)
        ・CIのフォーラムに既にあるSuperModel・QuickModel等と違い、フォームデザインはVの仕事だと考えるため面倒見ません(フォームの自動生成はナシ)←私はjsで入力補助入れたり項目を動的に変更したり柔軟にフォームを変更したいので^^;
        ・django.contrib.db.models風な使い方をしたくて作ったものなので、djangoを触ったことが無い人には却って使いづらいかも(汗

        djangoな人はrhaco使いさんが多いようで、djangoとCIを両方使ってる人ってあまり居ないでしょうが(爆)
        全く需要ないかもしれませんが、お手軽CRUDとしては結構いいんじゃないかと自画自賛してみる。


        MVCのmodelはO/Rマッパとは限らない

        0
          という基本的なことを忘れてました^^;

          小規模CMS作るぐらいなら、別に気合入れてPropelとかdjango.db.models.ModelみたいなスゴイO/Rマッパ書かなくてもCodeIgniterのチュートリアルビデオみたいにDB操作用の薄いラッパとしてModelを位置づけてもいいんだよね。


          しかし、PHP4オブジェクト指向ってホント中途半端。
          pythonで文字列に至るまでオブジェクト!な世界に慣れた考えでPHP4スクリプトを書くと、1個変数を定義するのにも配列にするはめに陥る…。

          #容量的にも機能的にも特にメリットあるとは思えない鯖を使ってる企業が多いのはなんでなんだろう…。
          #代理店手数料目当ての悪徳(?)WEB屋の仕業?−−;
          #本社のWEBはRoRで動いてる(らしい)外資系企業さんなのに、同等のCMSを高い割に制限多すぎの共用鯖(PHP4/SSH使用不可/CGIはPerlのみ)で作ってほしいとか、ありえん。
          #あと2千円月額サーバー代予算を削って(爆)さくらのレンタルサーバー・ビジネス(プロ)に移転してくれたら容量同じでdjangoが使えるのにー。


          CodeIgniterでユーザー認証

          0
            CodeIgniterのscaffoldはphpMyAdminの代替(しかも一時的)にしか使えないということがわかったのでfーー;
            django.contrib.adminみたいなcoolなものでは無かった様子。

            めげてばかりもいられないので、
            ・ユーザー認証
            ・CRUD
            の作り方、要はdjangoだとcontrib.authとかcontrib.adminがやってくれちゃうところから、まず自作することにしました。 ←django流(?)に「管理画面を作ってから公開用画面を作る」です^^


            まず、「codeigniter ユーザー認証」「codeigniter authentication」等のキーワードで片っ端からググりました。
            すると、現在はCodeIgniterには純正認証フレームワークは付いておらず、サードパーティのプラグインやライブラリの形で公開されていることがわかりました。
            #いずれ認証クラスがデフォルトで付くかもしれないけど :-)

            FreakAuth
            Rapyd
            ←プラグインですがcontrib.adminみたいなものを作ってくれるやつらしい?

            どちらもアプリをフルに上書きして使う形で、既にconfigファイルを書いてしまった気の早い私には不向きです(爆)
            あと、使い方のドキュメント&インターフェイスが英語ばかりなので、習得するのに時間が掛かる&画面の日本語化メンドクサという理由で却下。


            そこで、こちらのwikiを参考にControllerをextendしたMY_Controllerを使う方法で実装してみました。


            CodeIgniter始めました

            0
              PHP4しか入ってなくて、しかもSSH接続不可のサーバーをご契約済みのお客様に当たってしまったので、CodeIgniterを始めてみました。

              最初は今更ながらCakeやろうかな?と思ったんですが、CodeIgniterのほうがCakeよりパフォーマンスが良いというこちらのベンチ結果を見て、パフォーマンス命!(笑)の私が飛びついたというわけ。

              まだ使っている人が少ないせいか、symfonyやdjangoに比べてドキュメントが少ないので(日/英ともにfーー;)苦労してますが、djangoとpythonのお陰でオブジェクト指向脳&MVC脳になったせいか、処理の書き方以外の面では意外とサクサク進められてます。
              PHP信者の方々もたまにはpythonとかdjango触ってみればいいのに(笑


              それにしても、久しぶりに(!)djangoじゃない形でWEBアプリ作ってますが、思ったよりPHP忘れてるなぁということに気付いてしまって(滝汗
              だって、POSTかどうか判別するのにif($_REQUEST['METHOD']=='POST')とか書いちゃうんですよ(爆 ←どんだけdjangoを愛してるんだ、私はww


              1

              PR

              calendar

              S M T W T F S
                 1234
              567891011
              12131415161718
              19202122232425
              262728293031 
              << March 2017 >>

              twitter

              selected entries

              categories

              archives

              recent comment

              • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
                プログラマー
              • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
                よし
              • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
                ななうぇぶ
              • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
                よし
              • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
                よし
              • WindowsのPCで開発するphperがxhprofを使う方法
                ななうぇぶ
              • WindowsのPCで開発するphperがxhprofを使う方法
                川本
              • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
                よし
              • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
                77web
              • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
                ktz

              recent trackback

              • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
                常山日記
              • django対symfony 日本語メール送信(その1 symfony編)
                CPA-LABテクニカル
              • CodeIgniterでユーザー認証
                されどLAMPな日々
              • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
                常山日記
              • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
                サーバー用語集
              • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
                常山日記
              • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
                mitszoの日記
              • python多次元リストをsort(並べ替え)する方法?
                mitszoの日記
              • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
                Humming Via Kitchen
              • 日本語テキストをtruncate@django(Python全般にも??)
                常山日記

              recommend

              links

              profile

              search this site.

              others

              mobile

              qrcode

              powered

              無料ブログ作成サービス JUGEM