表示失敗
2011年11月25日(金) 23時32分26秒

BuKuMa!のMySQLバージョンアップ(4.0→5.5)+UTF-8化 [PHP]

テーマ:プログラミング関連
PHPで作成している自分用のオンラインブックマークサイト、BuKuMa!ですが、
MySQLのバージョンが4.0と古かったので、5.5にバージョンアップすることに。

でないと、他のデータベースを新規作成できないという、

さくらインターネットの仕様があるためです。

そこで、この機会に、文字コードをEUC-JPからUTF-8に変更しようと思いたち(理由は後日)、

いろいろいじって見ました。

PHP+MySQLの勉強がてら。

しかし、なんか初めで躓いて閉まったので、忘備録として残しておきます。




書きかけです。


ネットで検索してみると、

さくらインターネット+PHP+MySQL+UTF-8で文字化けするというのが、

たくさん出てきます。

私ももれなく該当しました。



まず、MySQLのデータベースのエクスポートをし、バックアップをとります。

といらえず、phpMyAdminの初期設定のままエクスポート。

そして、「テキストエディタ」に貼付けておきました。

(文字コードを簡単に変換できるもの)

そのあと、インポートすればいいだろう・・・と、たかをくくっていたのですが、

結構大変でした・・・。



そして、データベースを、さくらインターネットのコントロール画面で削除。

あっさり消えました。

さて、インポートとなるのですが、

ここで、UTF-8にすることを思い出す。

そして、新規データベースを作成で、新しいサーバを確認し、

再びphpMyAdminへ。

MySQL 接続の照合順序:utf8_general_ciにとりあえず、設定。

そして、インポートをファイルを読み込んでする方法を採用し、

一気にインポート・・・したのですが、エラーが出ます。



まず出たのは、「すでにデータベースがあります」というもの。

そりゃそうだ、と思い、create文をコメントアウトして、(-- をつけるだけですが)

インポートしなおしました。

そして、サイトを開いてみると、ページ全体が文字化け。

ひどいものでした。


そこで、まず、htmlのメタタグのEUC-JP指定になっていたのをUTF-8に指定。

そして、phpファイル自体を、まだエンコードしていなかったので、

テキストエディタで変更。utf-8に。

そうしてもう一度みてみると、自分が書いた部分はOKだったのですが、

MySQLからデータを引っ張ってきている部分だけ、文字化け。

しかも、半角英数字のところは記述されていますが、

日本語文字が、?????????????となっています。

文字コードの変更スクリプト部分がいけないのだと思い、

まずは、php.iniファイルを確認することに。

(最初にしておくべきでした)

と言っても、さくらインターネットでは、変更するところだけかけばよいので便利。

http://www.yamada-lab.org/doc/win/mysql5/utf8/index.html

こちらを参考に、


mbstring.internal_encoding = UTF8
mbstring.http_output = UTF8
default_charset = "UTF8"

を追加。

なぜか、最後の行だけ""をつけていたのですが、つけなくてもOKのようです。


BuKuMa!は、下記の本の15-5リンク集を改造したものです。

PHPによるWebアプリケーションスーパーサンプル 第2版/西沢 直木

¥3,990
Amazon.co.jp

しかし、この本では文字コードはEUC-JPが前提となっているようでして、

UTF-8にするための方法がいまいちわかりませんでした。

一応、設定する部分はあり、そこにUTF-8と書いたのですが、うまく行かず。

というか、まず、エラーがでて、

phpファルのコードで、MySQLのデータベースへの接続の所でおかしいことが発覚。



ネットでいろいろ探していたら、

下記のようにするとよいとありました。


mb_language("uni"); //<--追加
mb_internal_encoding("utf-8"); //<--追加
mb_http_input("auto"); //<--追加
mb_http_output("utf-8"); //<--追加
echo $_POST['aaaa'];
?>

http://www.infinity-dimensions.com/blog/archives/000114.html


そこで、

// =================================================
// ----- db接続
// =================================================
function db_conn() {
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");
$conn = mysql_connect(DBSV, DBUSER, DBPASS) or die("接続エラー");
mysql_query("SET NAMES utf-8",$conn);
mysql_select_db(DBNAME, $conn);
return $conn;
}

// =================================================
// ----- SQL実行
// =================================================
function db_query($sql, $conn) {
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");
mysql_query("SET NAMES utf8",$conn); //ここは適当
$res = mysql_query($sql, $conn);
return $res;
}

と、編集。ひたすらUTF-8だよと主張するのですね。(^^;)


そうしたら、エラーが消えました。よし。文字化けを何とかせねば。



phpファイルをまた開いて編集。

mb_detect_encoding($string, "EUC-JP, SJIS")

として、エンコードを確認するところがあったのですが、

イマイチよくわからず、ここのエンコード名を色々変えて実験。

・・・・すべて失敗。

なので、最終的には、

// =========================================================
// データをSQL用に変換
// =========================================================
function cnv_sqlstr($string) {
// 文字コードを変換する
//$det_enc = mb_detect_encoding($string, "EUC-JP, UTF-8");
//if ($det_enc and $det_enc != ENCDB) {
// $string = mb_convert_encoding($string, ENCDB, $det_enc);
//}
// バックスラッシュを付加する
$string = addslashes($string);
return $string;
}

と、このへんの文字コードを変換する部分を

すべてコメントアウトして、回避。

もう一箇所、同じようなところも同様に。

また、管理画面のphpファイルも同様に。

そうしたら、表示される文字がかわり、うまくいきました。



でもこのとき、実はまだエラーが出ていて、

unexpected $end

と出ていました。

こちら

http://okwave.jp/qa/q2516204.html

をみて、なるほど、と思い、ソースをくまなく検査。

if文の閉じる"}"が一つなくなっていました。


これでよし!と思ったのですが、もう一つエラーが。

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent~~~

これには参りましたが、

このままこのエラーをコピペして検索したら下記がヒット。


http://www.6krpm.jp/blog/web/php/2008/06/21/1306/

よく読んでみると、「UTF-8N」とありました。

そうか、BOMの有無だったんですね。

ファイルをすべて、UTF-8からUTF-8Nに変更。

そうしたら見事。


なんとか、UTF-8Nバージョンの、BuKuMa!が出来ました。



ちょっとマニアックな記事ですいません。

でも、検索結果を見るかぎり、さくらインターネットで、UTF-8で文字化けというキーワードで、

たくさん出てくるので、参考になったという方がいたらいいなと思います。


では、なぜ、あえてUTF-8にこだわったかというと、

php.iniの設定でUTF-8をデフォルトにしないといけない「もの」を、

サーバにインストールしたかったからです。

それはまた後日。。。



いつも応援、ありがとうございます!

Ranking Click!→
にほんブログ村 クラシックブログ クラシック音楽鑑賞へ
にほんブログ村
にほんブログ村 哲学・思想ブログ キリスト教へ
にほんブログ村
にほんブログ村 サラリーマン日記ブログへ
にほんブログ村


いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事
 もっと見る >>
2010年04月21日(水) 23時36分52秒

(続編)Fortran77の開発環境をWIndows7に。

テーマ:プログラミング関連
20日の記事の続きです。

http://ameblo.jp/gospelchemist/entry-10512959389.html

月~火曜の夜は、マイPCで、Fortran77の開発環境を整えることに注力しました。
しかも、Windows7のマシンに。

へとへとになりました。ダウン

時代が時代なんですね。どうやら、SalfordのFTN77(Silverfrost FTN77 Personal Eddition)は、
古くてWIndows7ではコンパイルがうまくいきませぬ。

(Windows Vistaではうまくいきました。)

Windows7では、ときどき成功するのですが、30回に1位回くらいしか成功しないので、
かなりイライラしました。プンプン



そこで、研究室の同輩に聞いて、他の開発環境を整えることにしました。

"cygwin"をインストールし、Windows上でUNIX環境を実現させ、
そこでコンパイルをするというもの。
Fortranは、g77でコンパイルできます。

http://cygwin.com/

こいつをインストールして、セットアップ。

セットアップするときに、FortranやC, C++などの言語の開発環境や
viなどのエディタ機能を追加した形でインストールしました。

少し時間はかかりましたが、これでWindows上でUNIX環境を整えることに成功。

ここで、Fortran77のプログラムをコンパイル+実行してみると、
一発で成功しました。

めでたしめでたし。ニコニコ

これで、インターネットが無い環境であっても、
コンパイル+実行が可能になりました。グッド!


更に、FCPADによる開発環境もよいのですが、
Notepad++というフリーのプログラム開発環境を教わりました。

http://www.forest.impress.co.jp/lib/stdy/program/progeditor/notepadplus.html
窓の杜のページのリンクです。

最新版は、ファイルが壊れるなどの不具合が報告されているそうなので、
このバージョンを使いました。

インストールしてみてびっくり。
たくさんの言語に対応していて、もちろんFortranにも対応していました。

タブの文字送りの設定の方法が最初わかりにくかったですが、
(設定⇒環境設定⇒言語メニュー⇒タブ設定)
慣れてくると、If文やDoループなどを一目でわかりやすく括りだすこともできたりして、
重宝しそうです。
タブは、空白に変換し、一回のタブで3文字文のスペースを入れるように設定しました。

また、
Windows7にも対応しています。

FCPADよりも、色分けのオプションが豊富で、
ごちゃごちゃしたプログラムソースが見やすくなります。

()で閉じた部分も、色で対応させてみることができていいかんじです。

ただ、高機能過ぎて、若干重かったりもしますが、なれたら非常に便利かもしれません。
それに、Fortranだけでなく、CやVB、HTML、PHPなど、豊富な言語サポートがいいです。


いちいちインターネット上にファイルをFTPでアップしなくても、
自分のマシン上でコンパイル+実行ができるプログラム開発環境が整いました。
cygwinによるUNIX仮想環境も慣れればスムーズに使いこなせそうです。


あとは、私のプログラミング・センス+経験値でしょうか・・・。
ドクター取得に向けてファイト!


キーワード:
cygwin Fortran 77 プログラミング開発環境 Windows 7 フリーソフト



いつも応援、ありがとうございます!

Ranking Click!→
にほんブログ村 大学生日記ブログ 博士課程大学院生へにほんブログ村 大学生日記ブログ 理系大学院生へ
にほんブログ村

学生ブログランキング

いいね!した人  |  コメント(0)  |  リブログ(0)
2010年04月20日(火) 00時09分24秒

Fortran77の開発環境をWIndows7に。

テーマ:プログラミング関連
本格的に、プログラミングの勉強を再開しました。

昔、やっていたのですが、最近はプログラミングから離れていたので、

すっかり忘れてしまっています。

最初の基礎からやり直して、しっかり勉強したいです。

しかも、Fortran77という古代言語とも言えるかもしれない言語の開発環境を、

最新のWindows7に入れるということで、

ちょっと心配もありましたが、

ともかく動けばOKです。(笑)



Fortran77の開発環境のセットアップ手順をメモ書きしておきます。

参考にしたサイト:
http://www.geocities.jp/eyeofeconomyandhealth/homepage/hojo/mokuji.html#t

コンパイラの入手先:
http://download.cnet.com/Silverfrost-FTN77/3000-2069_4-10537937.html
(上記のサイトに書いてあるところにはなかったです。検索して探しました。)
(Silverfrost FTN77とありますが、
インストーラーが起動すると、Salford FTN77となっていました。)

エディタの入手先:
http://www.vector.co.jp/soft/win95/prog/se153699.html

CPad for Salford FTN77というエディタです。
見た目をいろいろ変えられるのでいいですね。

ただ、最初からバグが・・・。

Implicit Double Precision (A-H, O-Z)
と書くと、
Implicit Double Precision (A-H, O-Z)
となります。

(実行⇒)設定⇒キーワード⇒グループ3で、いろいろ見てみたら、
Presision
になっているではありませんか!
そこをなおしたら、きちんと、
Implicit Double Precision (A-H, O-Z)
と表示されました。
よしよし。

パソコンの再起動をして、また続きを・・・。


//////


あれ??

コンパイラが行方不明・・・。

と思ったら、Program Filesの中にだだだっと入っていました。

そこで設定をして、コンパイル⇒実行をしてみましたが、

エラーがでて計算ができない・・・。

NO ERRORS.と出ているのに・・・。

なんでだろう・・・・。

Windows7だから?

それともProgram Filesのフォルダの直下だからかな?

コマンドプロンプトが起動して、

Print文が表示されて、Read文もちゃんと読みこまれているみたいなのですが、

計算を実行しようとすると、エラーになります。

ちなみにWindows上ではなく、UNIX上ではちゃんと計算もできるので、

コードに問題はないはず。

やっぱ、Windows7のせいなのか?

よくわかりませぬ。

とりあえず、当分は、コンパイラは使わないで、

エディタのみ使用して、

毎回面倒だけどFTPでアップして、ネット上でコンパイルします。

でも、ネットを使わなくてもデバッグとかコンパイルとかできるようにしたいのですが・・・。


(だれかヘルプ・ミー・・・)


と、思っていたのですが、

おちついて再度設定を変更・・・。

SalfordというフォルダをProgram Filesの下に作成しました。

そして、再インストールして、実行してみたら、コマンドプロンプトが開いて、

計算を実行することができました。

相変わらず、エラーダイアログが何度もお目見えしてしまうのですが、

無視して実行すると、計算ができました。

いちいちコンパイルだけとかすると、だめみたいです。

一気にコンパイル+make+実行で、めでたしめでたし!!!



先日作成した、簡単なプログラムが、Windows上で動いているのに、

なぜか感動です。

あ。。。でも、もう1時半だ・・・。

(だらだらと書いてすいません、以上、パソコンとの格闘の実況でした。)


追伸:
続編があります↓
http://ameblo.jp/gospelchemist/entry-10514575741.html


いつも応援、ありがとうございます!

Ranking Click!→
にほんブログ村 大学生日記ブログ 博士課程大学院生へにほんブログ村 大学生日記ブログ 理系大学院生へ
にほんブログ村

学生ブログランキング


いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。