ディレクトリ構造と文字化け対策

このQ&Aのポイント
  • ディレクトリ構造の相談として、ドメイン設定によりwww/hoge/controller/がドキュメントルートに設定されています。smartyを使用し、templateやimgディレクトリはcontrollerと同階層にあります。ドキュメントルートにcontrollerを置くのはおかしいか、それとも1つ上が妥当か悩んでいます。
  • 文字化けの問題に関して、ロリポではsjis対応できたため、データベースの文字コードもsjisにしました。しかし、さくらサーバーでは文字化けが発生しています。PDOを使用したSQL実行によって、文字列が消えるような書き込みの問題が発生しています。mb_covertを使用して文字コードを変換する方法について教えていただけると助かります。
回答を見る
  • ベストアンサー

ディレクトリ構造と文字化け対策

最近ロリポから、さくらサーバーのスタンダードに切り替えました。 ■ディレクトリ構造の相談 ドメイン設定により、www/hoge/controlle/ の中をドキュメントルートに設定しました。 ※ドメインたたいたら、controller内のindex.phpにアクセスしたいため ちなみにsmartyを使用しており、templateやimgディレクトリはcontrollerと同階層にあります。 1.そもそもcontroller(templateをdisplayするphpドキュメント置場)の下をドキュメントルートにするのはおかしいかでしょうか? 2.おかしい場合、1つ上が妥当かと思いますが、その場合controller/index.phpをドメインだけで表示するにはどうすればよいでしょうか? ■文字化け ロリポではsjis対応できたので、全てsjisにしましたが、さくらがダメそうなのでどうしようかと… DBへの書き込みと読み込みで文字化けます…(書き込みは文字列が消えているような…) DbCommon.phpにPDO利用によるSQL実行、dao内でコンテンツ事のSQL発行をしています。 mb_covert(使い方よくわからない…)はどこのタイミングでやれば全ファイル共通化できるか、ご教示いただけますと幸いです。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

■ディレクトリ構造の相談 さくらサーバだったら、 /home/youraccount/www が、Webルートになると思います。 /home/youraccount/controller /home/youraccount/smarty /home/youraccount/template などとおいて、 /home/youraccount/www/index.php /home/youraccount/www/img とおいてやって、 index.php <?php require_once './controller/example.php'; ?> などとして、controllerディレクトリ内にあるクラスなどライブラリを呼んでくるのが一般的ではないでしょうか。 ■文字化け 一番簡単なのは、データベースの文字コードに合わせてスクリプトを書くことではないでしょうか。 さくらインターネットのMySQLは、EUC-JPになっていたと思います。 もしくは、SSHでサーバに入って、alter databaseで文字コードを変えるとか。(まだデータが入っていないなら。) どうしてもスクリプト側で処理する必要があるということであれば、 PDOにINSERTしたい文字列を入力するときに変換をかける感じです。 mb_convert_encodingの使い方は、 <?php $value = mb_convert_encoding($original_value, 'eucjp-win', 'sjis-win'); ?> といった感じです。eucjp-winやsjis-winは、Windowsの機種依存文字に対応する文字コード形式です。 とりあえず、MySQL関連の文字化けに関するノウハウは、バッドノウハウも含めて膨大にあるので、 まず一度鵜呑みにしないで色々調べてみたほうが良いかもしれません。

ideal16
質問者

お礼

ご回答ありがとうございます。 かなり理想的なお答え感謝致します! ■ディレクトリ やはりその構成が普通ですよね… 勉強がてらなので、我流なフレームワークでして(笑) www/index.phpでどう作っていいのか正直イメージがわかないです(汗) フレームワークの基盤ファイルとdisplay用のcontrollerファイルを読み込むのかなぁという感覚ですが… もっと勉強が必要ですね! ■文字化け モバイルなので、DBへ入れるときはUTF-8、吐き出すときはShift-JISかなと思ったのですが、そもそもPDOのどこに入れればいいのかわからず… 調べて色々なやり方があったのですが、どれもちょっと違うのかなぁという印象でしたが、ご教示いただいた感じでやってみたいと思います! この度は誠にありがとうございました!

関連するQ&A

  • テキストエディターの文字化け

    素人の者です。 これまで、PHPのプログラムの書き込みをSJISで行ってきましたが、どうもネット上を調べているうちにSJISはあまり使わないほうが良いようなことが書いてあったので、UTF-8で書くことにしようと思いました。そして、UTF-8で書いていてWEB上は特に問題なく文字化けもせず表示されるのですが、テキストエディターで再度ファイルを開くと、テキストエディター内で文字化けしていることがあります。メモ帳で開くときはファイルの文字コートをUTF-8に指定すれば文字化けしません。サクラエディターで開けば、何もしなくても文字化けしません。php_editor_stdで開けば、文字化けします。ez-HTMLで開けば、文字化けします。???とこんな具合です。テキストエディターを開くときにエンコードを指定して開けば、文字化けはしないであろうと考えて、設定の部分を色々と探していじってみても、文字化けの現象は変わりません。SJISですと、ダメ文字とかあるのでやはり切り替えていったほうが良いと思い試している最中です。テキストエディターで文字化けした場合、どのようにすれば解消するのかお分かりになる方がおりました教えていただけないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CakePHPでディレクトリ分けをしたい

    CakePHP2.3.4、サーバーはロリポップにて開発を行っております。 やりたいことは、コントローラーのディレクトリ分けです。 以下のようなディレクトリ構造にして、 app  |_Controller  |   |_admin  |    |    |_LoginController.php  ※メソッドはindex()のみと仮定  |    |    |_・・・.php  |    |  |    |_ListController.php  ※メソッドはindex()のみと仮定  |  |_View ※Viewも分けますが、今は省略しています。 アプリケーション「LoginCntroller.php」にアクセスする場合は http://○○.ne.jp/admin/login/index アプリケーション「ListController.php」にアクセスする場合は http://○○.ne.jp/list/index でアクセスしたいです。 自分なりに調べて、「bootstrap.php」に以下追加、 App::build(array(  'Controller' => array(ROOT.DS.APP_DIR.DS.'Controllers'.DS.'Admin'.DS,) )); 「route.php」に以下追加、 Router::connect('/admin/login', array('controller' => 'login', 'action' => 'index')); などと行ってみてはいるのですが、結果、以下のエラーになってしまいます。 Missing Controller Error: AdminController could not be found. Error: Create the class AdminController below in file: app/Controller/AdminController.php <?php class AdminController extends AppController { } Controller直下に配置したアプリケーションに関しては問題なく実行されます。 何が悪いのか見当もつかず困っております。 よろしければご教授いただけませんでしょうか。

    • 締切済み
    • PHP
  • どんなディレクトリでもindex.phpへ飛ばす

    http://ドメイン/abc/ http://ドメイン/eee123/ http://ドメイン/xyz/ このようにドメイン直下でどんなディレクトリが指定されても index.phpに飛ばして処理できるようにしたいのですが、 一般的にはどのような方法が使われているのでしょうか。 とりあえず下のようなリダイレクトをやってみたのですが、 index.php用のcssが読み込めなくなってしまいます。 RewriteEngine on RewriteRule ^(.*)$ index.php [L] (おそらくcssもリダイレクトしてしまっている) レンタルサーバなのでapache設定は.htaccessには 書き込めますが、httpd.confには書き込めません。 ちなみに目的は指定されたディレクトリ名で データベースを検索するなどします。

  • PHPでのドキュメントルート指定方法

    PHPでのドキュメントルートの指定方法がうまくいかず困っています。 マルチドメインで組んでいます。 公開ディレクトリのルートは /home/hoge/www になります。 wwwの中に/piyo/でマルチドメインを組んでいます。 →絶対リンクを/home/hoge/www/piyo/ ここに指定したいです。 あるサイトを見てcommon.phpを作成し、index.phpと同じ階層に置き、index.phpの頭に <?php include 'common.php'; ?> を指定すると設定ができると記載されていたので下記の様に設定しました。 // common.php // <?php // サーバー上の絶対パスを記入 // これは公開ディレクトリのルート(サイトのルートディレクトリ)と一致 $__DOC_ROOT__ = '/home/hoge/www/piyo/ <http://piyo.co.jp/> '; ?> // index.php // <?php include 'common.php'; ?> <!doctype html> <html lang="ja"> … <?php echo $_SERVER['DOCUMENT_ROOT']; ?> … </html> echoで呼び出してみましたがサイトのルートディレクトリが /home/hoge/www こちらになり変更されていませんでした。 これを /home/hoge/www/piyo/ に変更したいと思います。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • MySQL5.1の文字化け

    多くの方が同様の質問をされていたのですが、一致する問題が見つけれなかったので、ご存じの方がおられたら教えて下さいm(_ _)m (環境)  PHP 5.2.8 ZendFramework 1.5.1 から Pdo Mysqlを使用  文字コード:SJIS  Mysql 5.1  文字コード:EUC-JP (質問内容) 携帯の絵文字データをSJISのバイナリでスクリプト中に埋め込むため、スクリプトの文字コードをSJISに統一したところ、文字化けが発生しました。 SET NAMES SJIS のSQLを発行することで表示は正しくできるようなったのですが、新たにレコードを追加しようとすると文字化けが発生します。 例)情報 → 情表 insertを行う前の文字コードをSJIS,SJIS-win,EUCと変えてみましたが、SJISもしくはSJIS-winの場合は上記の例のとおりとなり、EUCにすると完全な文字化けとなりました... おそらく登録時にMYSQLがSJIS→UTF8→EUCに変換される時に正しく変換されていないものと思われるのですが、どなたか対処方法をご存じないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字化けしたディレクトリの名前を正常にしたい

    こんにちは。自己解決が困難な状況になったため、知恵をお貸しください。 サーバはさくらVPSで、CentOS6を使用しています。 ノートからサーバへファイルをコピーしたところ、文字化けが発生したので、これを正常な名前にリネームしたいです。 /usr/document ディレクトリ下に”経済学の略語一覧.txt””経済学の略語関係.txt”というtxtファイルを入れた”経済学”フォルダをコピーしました。 コピー後、/usr/document内が正常に表示されているかチェックしました。しかし、 #cd /usr/document #ls -i 3276821 経済学 を期待したのですが、 #cd /usr/document #ls -i 3276821 ??????? と表示されています。 文字化け時のリネーム方法を探したのですが、大抵のページには文字化けファイルの削除方法しか掲載されていませんでした。 3276821という数字をうまく使えば、???????部分をリネームすることができると思うのですが、方法がわかりません。 ファイルをリネームするには、ここからどういうコマンドを実行すればいいのか、教えていただきたいです。 よろしくお願いいたします。

  • jsでルートディレクトリより上のファイル

    jQueryのAjaxでurlをルートディレクトリより上の階層にあるファイルを指定できないのでしょうか? 具体的には以下のような階層になっていてindex.html内で記述されているAjaxでexe/test.phpを呼び出したいと思っています。 サーバールート ├home(ルートディレクトリ) │└index.html └exe   └test.php index.html内に記述されているjavascript $.ajax({  type: 'post',  url: '../exe/test.php',  dataType: 'html',  … }); これを実行すると、FireBugで「404 Not Found http://www.samplecom/exe/test.php」と出てしまいます。 つまり、'../exe/test.php'と指定しているのにルート直下の「exe/test.php」を指定しているかのような結果になってしまっています。 javascriptではルートディレクトリより上のファイルを指定できないのでしょうか?

  • phpMyFaqでの文字化けについて

    こんにちわ。 現在、phpMyFaqを使ってナレッジベースの構築を検討している者です。 いくつかトピックスが上がっているようでしたが、私も文字化けに 悩まされております。 どなたかアドバイスを戴ければ助かります。 宜しくお願い致します。 <当方の環境> [PHP] php-5.2.6 php.ini [mbstring] mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; [db] mysql-4.1.22 my.ini default-character-set=sjis [OS] Windows 2003 server [phpMySQL] phpMySQL-2.0.9 なお、MySQL.exeを使って、SQL文で登録内容を確認したところ、 登録した文字は文字化けすることなく、登録ができていました。 表示時の問題でしょうか?

    • 締切済み
    • PHP
  • 文字コードの設定

    文字コードの設定する場所って 何箇所かあると思うんですが 教えてもらえないでしょうか psql -l Database | Owner | Encoding -----------+----------+----------- template1 postgres SQL_ASCII php.ini i18.internal_encoding = SJIS 後、ありましたら教えてください 違うマシンで同じ環境を作ろうしているのですが できなくて困っています Redhat6.2J postgres 7.0.2 php3.0.18

    • 締切済み
    • PHP
  • MySQLの文字化け

    Win XP MySQL4.0.13 TOMCAT4.1 APACHE2 以上を使用して自宅にて開発を行っております。 HTMLページより入力されたデータをjspファイルへ渡し、jspファイル内へ記述されたSQL文によりデータベースへの書き込みを試みております。 データベースへの書き込み自体はできるのですが、文字化けで困っています。 書き込み後、プロンプトよりselect文で確認すると、日本語のみ文字化けし、アルファベットは大文字が小文字にところどころなってしまいます。数字は問題ありませんでした。 具体的には「あいうえお」が「BDFHJ」に文字化けしていました。 MySQLのコンソールのMY.ini Setuoタブに [mysqld] default-character-set=sjis [mysql] default-character-set=sjis と指定しており、HTML,jspファイル内でもshift-jisを指定しております。 ご教授よろしくお願いしたします。

    • ベストアンサー
    • MySQL