• 締切済み

PHPマルチバイト文字列関数

FedoraCore4のPHP-version5.0.4 rpmをインストールしたのですが、マルチバイト文字関数が標準になっていないのでマルチバイト文字関数が使えるようにしたいのです。 今のところ一度PHPをアンインストールして、ソースを落としてきて、configureの時にオプションで指定して対応しようかと考えています。 しかし、超初心者ですのでもう少し簡単な方法を探しています。ご存知の方はぜひご教授いただきたいと思います。 よろしくお願いいたします。

みんなの回答

  • zem
  • ベストアンサー率70% (51/72)
回答No.1

こんにちは、まずはじめにソースからのコンパイルと RPM のリビルド(RPMパッケージを作り直す)という2つの方法があります。が、どちらも荊の道です(^^; ソースからでしたら configure 時に --enable-mbstring \ --enable-mbregex \ --enable-zend-multibyte \ この3行を加えるようにしてみてください。あとは必要に応じて他のアプリケーションも --enable~ や --with~ で指定する必要があります。いまどんな configure が指定されているかは <? phpinfo(); ?> とだけ書いたページを設置して上から3段目「Configure Command」の部分を参照してください。 ちなみにソースからインストールしようとしても、パッケージの必要性などから Configure Command 通り configure に実行してもエラーになります。 RPM パッケージと同じような構造でマルチバイトに対応させたい!という場合は、パッケージ毎まるごと再構築する方法がおすすめです。以下、ちょっと長いです。 まず、ソースを取得して、spec ファイルという RPM の設定素となるファイルを開きます # cd /usr/local/src/ # wget http://ftp.riken.go.jp/pub/Linux/fedora/core/4/i386/os/SRPMS/php-5.0.4-10.src.rpm # rpm -ivh php-5.0.4-10.src.rpm # vi /usr/src/redhat/SPECS/php.spec 次にファイルの 453 行目に以下の項目を追加します。 --enable-mbstring \ --enable-mbregex \ --enable-zend-multibyte \ これで準備は整いました。 # rpmbuild -bc /usr/src/redhat/SPECS/php.spec と実行すると、全てのパッケージをインストールしていない限り、以下のようなエラーがでます。 エラー: Failed build dependencies: aspell-devel >= 0.50.0 is needed by php-5.0.4-10.i386 libjpeg-devel is needed by php-5.0.4-10.i386 aspell-devel や libjpeg-devel が PHP コンパイル時に必要となるパッケージです。 # yum -y install パッケージ名 このコマンドを実行して、必要とされるパッケージを全てインストールします。 インストールが終わったら、再びパッケージの作成です。 # rpmbuild -bc /usr/src/redhat/SPECS/php.spec ちょっと処理時間が長いです。 終わったらインストール済みの PHP パッケージを削除します(依存関係の問題が発生するため)。 # yum remove php 終わったら、PHP 関連の RPM をインストールします。 # rpm -ivh /usr/src/redhat/RPMS/i386/php*.i386.rpm その後、apahce の再起動をして設定が有効になります。 # /sbin/service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ] <? phpinfo(); ?> を記述したファイルにブラウザからアクセスすると、以下のように Multibyte Support の行が追加されていると思います。 mbstring Multibyte Support enabled Multibyte string engine libmbfl Multibyte (japanese) regex support enabled Multibyte regex (oniguruma) version 3.7.0 ちょっと長くなってしましましたが、パッケージを再構築するほうが、おそらく手軽な方法です。これまでの RPM 版 PHP の環境を引き継ぎつつ、日本語にも対応させるには RPM 再構築が手軽、と思います。 時間がかかってしまいますが、腰を据えておためし下さい。

関連するQ&A

  • 【PHP】常にマルチバイト文字列関数でいいですか?

    PHP初心者です。バージョンは4です。 文字を扱う関数はマルチバイト対応と非対応があるみたいですがその使い分けがわかりません。いっそ常にマルチバイト対応にしとけばいいのではと考えてしまいますがどうなのでしょう?たとえば、置換の場合、 preg_replace と str_replace がありますが、常に preg_replace を使っていて問題はないのでしょうか? お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • マルチバイト関数の呼び出し方

    WindowsXP上でApache2.0.54とPHP5.0.4を使ってPHPのテストサーバを立てたのですが、マルチバイト関数をまったく読み込んでくれません。 PHPのコアファイルなどを "C:\Program Files\" 以下に "PHP 5.0.4" と言うフォルダをつくり、そこに保存してあります。Apacheの設定ファイルでPHPのモジュールをそのフォルダから呼び出して、うまくPHPが動作しました。また、PHP.ini上でextensionを "C:\Program Files\PHP 5.0.4\ext\" から読み出すようにしました。もちろん、extension一覧にあるphp_mbstrings.dllのコメントははずしてあります。 どのようにしたら、マルチバイト関数を呼び出せますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • fedoraでインストールしたPHP5をアンインストールにするには

    fedoraにPHP5をソールからインストールしました。 ソースからといっても、 ./configure --・・・(オプション多数) make sudo make install としただけなのですが。 で、PHP4を入れたりrpmからインストールしたり試してみたいと思っています。つきましてはアンインストールをしたいのですが、どうすればいいのでしょうか? make uninstall ではできませんでした。 Googleで調べてはみましたが・・・。キーワードだけでも教えていただけると幸いです。 よろしくお願いします。

    • 締切済み
    • PHP
  • FedoraCore4でrpmでPHP5をインストールした後にconfigureオプションの変更方法

    教えてください。 FedoraCore4でPHP5をrpmパッケージとして インストールしたのですが、インストールした後に configureのオプションをいろいろ追加したいと思っています。 --with-mysql --with-gd などです。 どのようにしたらconfigureの変更や追加を 行うことができるのか教えて下さい。 宣しくお願いします。

    • ベストアンサー
    • PHP
  • マルチバイト関数

    今ちょうどマルチバイト関数について勉強(独学)してるところなのですが マルチバイト関数をプログラム中で使えません。 私のプログラムが間違ってるのかと思い、サンプルをそのままコピーしたもの。 それを実行してみたのですが結果は同じでした。 Fatal error: Call to undefined function mb_substr() in C:\...\4-1.php on line 3 といったようなエラーです。 上手く設定がいってないのかなとphp.iniを見直すことにしました。 今phpのモジュールはC:\phpに解凍した中のextに入ってます。 ですから extension_dir = "C:\php\ext" といった風に設定しました。そして extension=php_mbstring.dll のように書きました。 C:\php\ext以下にこのphp_mbstring.dllが存在することは確認済みです。 テキストではこれで上手くいっているのでApacheを再起動して実行してみましたが どうしても先ほどのエラーが出て先に進みません。 いったいどうすれば使えるようになるのか教えていただけませんか?

    • ベストアンサー
    • PHP
  • redhat9でソースからphpインストール

    昨日、mysqlを利用する簡単な処理をphpで試したところ、 redhat9で提供されているphpはマルチバイト対応が出来 ていないので使い物にならないことが分かりました。 やむを得ずphpパッケージを削除して、ソースからイン ストールを試みました。幾つか親切なサイトを見つけて http://www.dolphy.gr.jp/webap/env/php-install.html 説明通りやってみましたが、 chmod 755 my-configure.sh 実行後、 ./my-configure.sh &> my-configure.log &実行時に、 checking host system type... i686-pc-linux-gnu checking for gcc...no checking for cc...no configure:error:no acceptable cc found in $PATH とエラーが出てそこから進めなくなりました。 環境はredhat9にup2dateでパッチは全て当ててある状態 から、rpm -qa | grep php | xargs -e でphpを削除しました。phpソースphp-4.3.4.tar.gzを 入手して展開、my-configure.shを作成しました。 #!/bin/sh ./configure \ --with-apxs2filter=/usr/sbin/apxs \ …省略(mysql以外サイトの説明通りです) やはりソースからのコンパイルを初心者は避けるべきで しょうか。出来ればマルチバイト対応したrpmパッケージ があればよいのですが… ご教授よろしくお願いします。

  • php4.0.6に対応するphp_mbstring.dll

    Apache1.3.35+PHP4.0.6でPHPのローカルテストをする環境を作ろうとしています。 ただ、PHP4.0.6にはマルチバイト文字関数を扱うphp_mbstring.dllが実装されていなく、マルチバイト文字関数を使えません。 後付で同dllを関連付けたいと思っているのですが、どうも他バージョンのdllは使えないらしいのです。 PHP4.0.6に対応するphp_mbstring.dllがどこにあるかご存知の方はいらっしゃいますでしょうか? また、関連付ける方法などご存知の方がいらっしゃいましたら、あわせて教えていただきますようよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • glibcをワイド文字=2バイト指定でmake

    glibcでワイド文字のバイト数を恣意的に変更してmakeするときの方法を ご存知の方がいましたら教えてください。 glibcを使い、ワイド文字=4バイトのLinux環境下で、ワイド文字=2バイトとして wchar系ライブラリ関数が使えるようコンパイルしたいと思っています。 makeするときに何かしら指定するオプションがあったりするのでしょうか。 それともソースの一部を触ってコンパイルしないといけないでしょうか。 同じソースから出来てると思われるLinuxとcygwinで、それぞれワイド文字が 4バイトと2バイトと違う形で環境が作られてるので、何かしら切り替える 方法があると思うのですが... makefile、configure系ファイルをざっと見てみましたが、それっぽい指定が できそうなキーワードを検索で見つけられませんでした。 なんでそんな事を考えているかというと、当Linux環境下で動くアプリが Unicodeは1文字2バイト固定で、長い文字列を含むデータを作成するのです。 そのような状況で、iconvなどを使って一度全文字UCS-4に変えてから wcs系関数を使うと、無駄が多いと思い、できればUCS-2として直接 データを扱えるようにしたいと思ったのです。 (競合対策のため、性能を第一優先としたい)

  • FedoraCore4+php5.0.4+Mysql4.1.11で文字化け

    過去のログを見たのですがばしっとした答えがみつからないので質問します。 旧マシンでfedoracore3+php4.3.11+mysql3.23.58を使っていたました。 新しいマシンにはFedoraCore4+php5.0.4+Mysql4.1.11にしました。 Fedora4にしたのはマシンのドライバの関係です。 旧マシンでのphp+Mysqlのwebシステムをそのまま新マシンに移行したのですがphpのwebページ上で文字化けというか[???]と表示されてしまいます。 mysqlとphpをどうしてもsjisで動かしたいのですが、 どうもいい対策がみつかりません。 ソースではなくrpmから展開していますのでオプション指定もできません。 sjisにしたい理由として ・携帯サイト作りはsjisなので今後もsjisでしたほうがなにかと便利だということ ・旧マシンはsjisでつくっている わたしがおこなったことは php.iniに default_charset =sjis mb関連をsjisに変更 my.cnfは [mysqld] default-character-set = sjis [client] default-character-set = sjis [mysql] default-character-set = sjis としています。 どなたかご教授おねがいします。

    • ベストアンサー
    • MySQL
  • VC++ マルチバイト文字とUniCode文字??

    VC++のプロジェクトプロパティには文字セット指定があります 『マルチバイト文字セット』『UniCode文字セット』の2者が選択出来ますが、これらの選択の優劣は何処にありますか? この選択の適否が分からない私は参考にしているサンプルがマルチバイトである時にはマルチバイトを、またUniCodeで書かれたサンプルを見ている際にはUniCodeを指定しており、恥ずかしいかぎりです 選択の判断基準を如何すれば良いのかご指導をお願い申し上げます 更に恥ずかしい質問】なぜC#には文字セット指定が見当たらないのでしようか???