アーカイブ : PHP

Cakephp2でTextHelper::truncate()がおかしいとき

2でTextHelper::truncate()を動かすと、1回目の処理が文字化けしてしまいました。どういう訳か2回目以降は正常に切り取ってくれます。

/lib/Cake/View/Helper/TextHelper.phpのソースを追ってみると、mb_strlen()が正しい文字列の長さを返していません。strlen()と同じ値を返してくれます。それで後のmb_substr()で正しく切り取ってくれていませんので文字化けしているようです。

strlen()になっているということは、予想通りmb_strlen()の第4パラメータにエンコードを指定しておけばOKでした。ということは、.iniのmbstringの項目を正しく設定していないのが原因です。そこで、

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8

なんて設定してApacheを再起動すると、ソースに手を入れずにエンコードなしで文字化けしないで表示します。/app以外のソースはいじらないのが基本。

つまり、日本語のサイトを作成するときは、mbstringをサボらずに設定しましょうというという基本を忘れるなということでした。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

PHPカンファレンス2011に参加してきた。

PHPカンファレンス2011に参加しました。10年近くPHPで仕事をしてきたのに、今回が初めての参加です。

さて、何かとセキュリティが低いと言われているPHPですが、だんだんと開発者が減ってきたのでしょうか? 私は違うような気がします。Webプログラミングでは簡単に入っていけますし、Windowsではないサーバーはとりあえずデフォルトで使えますし、レンタルサーバーを借りた際にはPHPは動かせます。WebプログラマーはPHPで開発できて損はないじゃないかと思います。

さてPHPカンファレンスですが、考えていたよりは盛況でした。あるセッションでは部屋に入りきれずに、別室でUStreamで見ているという、現地に行った意味ないじゃん、と行ったことがありました。こちらは運営の方には改善を願いたいものです。

セッションに感化されてTDDの本を帰りに買ってしまいました。今回はとても刺激になってよかったです。たまにこんなセミナーに参加して、モチベーションを上げていきたいものです。

普段使っているCakePHPは、もう盛り上がっていないのかな・・・。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

使えるねっとVPSをPHPを5.3にバージョンアップしたら障害たくさん出てきた。

暑さのせいでしょうか? 勢い余って、CentOSが6にバージョンアップされることが待てず、使えるねっとのVPSのPHPを5.1から5.3にバージョンアップしてしまいました。するといろいろ問題が起こりました。PHPのバージョンアップの目的は、WordPressを3.2にすること。結果としては、PHPはバージョンアップしないほうがよかったです。

とりあえずはローカルのサーバーでテストしていました。CentOSの5.6をインストールしているサーバーのPHPをアップグレードしています。こちらはうまくいっていました。

しかし、使えるねっとのVPSはうまく行きませんでした。それでも、むりやりバージョンアップしたら、管理ツールのPleskが動かなくなりました。そして、MySQLも起動できなくなって再インストール。こちらは何とか起動できました。データベースのバックアップがありましたのでリストアして元通り。WordPressのページは文字化けでするようになりましたが、wp-confing.phpの文字コードをutf8に設定を削除したら文字化けが直りました。

そして、お客さんのサイトがPHPで動いていたフォームメールが動かなくなっていました。こちらはPEARのライブラリもバージョンアップして、SMTPサーバーを外部サーバーに設定することで対応。ローカルのsendmailが使えなくなってしまったようです。

これでサーバーは外から見ると元に戻っています。WordPressは正常にアップデートできていますので目的は達成していますのでいいのですが(Google Analyticsが参照できるAnalytics360プラグインがWordPress3.2では動かないが・・・)、Pleskが動かなくっていますので、サーバーの設定がWebでできなくなっています。Pleskはあると便利なのですが、いろいろ制約があるので面倒なのです。

いっそのこと使えるねっとから乗り換えることも考え始めました。サーバーを決めるときは使えるねっとは、よかったのですが、最近はサービスがよく止まるし、サポートページは整理されていなくて改善されることもないし、今は他にもっとよいサービスも出ているので乗り換えてもいいかと思います。もっと安価で安定したサービスを探しています。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

#WordPress 3.2のアップデートは #CentOS 6待ち?

3.2が出たようで、WordPressのダッシュボードには燦然と更新マークが輝いています。

さて、WordPressが3.2になると、いろいろと機能が追加されたようですが、問題なのは実行環境が変わったこと。

  •  バージョン 5.2 以降(今までの要件はバージョン 4.3 以降)
  •  バージョン 5.0.15 以降(今までの要件はバージョン 4.1.2 以降)

今使っている使えるねっとでは、この要件に適合できない。PHPが5.1なのです。どうして5.1なのかというとCentOS5.3からです。すったもんだでCentOS6のリリースが遅れていて、上に乗っかってくるアプリが追い越していっています。無理矢理にPHPを5.2にアップデートする方法もあるようでしたが、私の場合できませんでした。

そろそろ、6がリリースされてミラーサーバーにコピー始まったよという話しもありますので、CentOSを待ってみます。おそらく、5から6へのバージョンアップの情報も出てくるかと思います。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

#CakePHPのサイトをサーバーに配置してはまったこと。

ローカルPCで開発していたCakePHPのサイトをサーバーに配置したら動かなかった。対応していく過程のメモ。

まずはPHPのバージョン。最新のPHP5.3にしたのは間違え。大量にエラーをはく。これは使っているCakePHPのバージョンがPHP5.3に対応していないため。以下のページに対応方法が書いてある。

PHP 5.3だとCakePHPで大量のエラー

あまりいじりたくないので、PHPのバージョンを下げる。前の記事のようにPHPの複数のバージョンを切り替えるようにしておく。インストールしてあったバイナリのMySQLとPostgreSQLの指定の方法がわからないので、こちらもソースからコンパイルしなおし。

次はページが真っ白になったり、ページが見つからなっている。mod_rewriteが動いていないことが判明。httpd.confでのパスの指定が間違えていた。単純なミス。

以上、一日テストサーバーの構築で潰れた。プログラムの修正は半日で済んだのに・・・。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

違うPHPのバージョンを切り替えできるようにする。

昔CakePHPで作成したWebサイトの機能追加を行っているのですが、そのサイトはPHP4なのです。テストするため、4の環境が必要です。

PCですとXAMPPで一発インストールなのですが、みんなで参照するLinuxサーバーではそうはいきません。今まではyumで簡単にインストールしていきましたが、PHP4は古いバージョンなのでyumでのパッケージインストールもできません。

しかたないのでソースからコンパイルです。PostgeSQLとかMySQLもソースからインストールしていきます。今回はとても時間がかかる。PHP4 だけではなく、いまはPHP5 もテストで使うであろうと考えて、切り替えるようにしておきます。参考になったのは、

【PHP】複数バージョンのPHPを使う方法

です。違いはApacheがパッケージでインストールしているとか、PHPのバージョンの違いです。

以上、自分が設定したことを忘れそうなので、手順はEvernoteにメモしておきます。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

XAMPPの昔のバージョンに再インストール

開発でロカールのPCにはXAMPP(、後はPerlだっけ?)をインストールしてお手軽に開発環境を作っています。

お客様の依頼で、ずいぶん昔に作ったサイトのメンテナンスをやることになりました。しかし、今の開発環境では動かない。おそらくPHP4で動いているのでPHP5では動かないのは当たり前。

そこで、PHP4に戻してみます。XAMPPのページには、「PHP5とPHP4と切り替えが可能だぜ。」と書いていますが、これは真っ赤なウソ。PHP4とPHP5を切り替えるphp-switch.batというバッチファイルが見当たりません。今のXAMPP1.7.xではPHP5のみになっています。

おかげでXAMPP1.6.8まで戻さなくていけません。戻すときには、MySQLと、Apacheのhttpd.confのバックアップを忘れずに。MySQLのデータベースは、\mysql\data以下のディレクトリをコピーすれば、そのままテーブルがインポートできました。1.6.8はセットアッププログラムではなくて、解凍したディレクトリ以下のファイルをコピーするだけなので、インストールは簡単かもしれません。本来は本番サーバーの環境とバージョンを合わせなければいけませんが。

無事にテスト環境で動くようになりました。PHP5への対応は大変そうだな。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

PHPExcelではまったこと2点

今、開発している案件でレポートをMySQLからデータを取得してPHPで加工してExcelファイルに書き出すなんてことをしています。テンプレートのExcelファイルを読んだり書いたりために、PHPExcelというライブラリを使っています。

PHPExcelを使って、はまったことが2つありました。一つはExcelファイルの特性かもしれません。

1点目。テンプレートのExcelファイルを更新してPHPExcelで読み込んでみても更新した前の内容のまま。

これは、Excelファイルの中にある元の履歴データからデータを取得しているようです。対処方法は、「名前を付けて保存」で上書き保存しました。もっとよい方法があるかもしれません。

2点目。セルに1文字だけだとUnknown Errorでそのセルが読み込めない。

これはPHPExcelの内部で使っているiconv_substr()のバグでしょうか? とりあえずセルを2文字以上に設定しています。PHPExcelのソースをいじればいいのでしょうね。

PHPのプログラミングに関係していない人には関係ない、自分のための覚え書きでした。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

PHPのopen_basedirの設定ではまる

使えるネットのサーバーは、PHPのセキュリティーが厳しくなっている。httpdocsディレクトリ以外にPHPのプログラムからアクセスしようとすると、すべてエラーになる。書き込みはもちろん、request/inludeでのファイル読み込み、file_exists()でのファイル存在チェック、何とPEARライブラリもエラーになる。

原因は、open_basedirの設定。使えるネットのVPSの場合

/var/www/vhosts/ドメイン/conf/vhost.conf

内で

_admin_value

にパスを追加して設定します。詳細は、使えるネットのユーザーフォーラムから。

しかし、PEARの設定は、

/usr/share/pear

/usr/share/PEAR

のように、大文字に合わせなければいけないことに注意。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE

#PHP の配列関数はたくさんあるのね。

CakePHPのソースを見ていて、自分では使ったことのない配列の関数があった。例えば、array_intersect_key()とか。この関数は、「キーを基準にして配列の共通項を計算する」というものらしいが、その他マニュアルを見るとたくさんの配列関数があった。

自分は配列かどうかとか、要素が含まれているとか、簡単な関数しか使わないが、おそらく用意されている関数に似たような機能を自分で作っていたかもしれない。用意されている関数であれば、処理も速いしバグも少ないかもしれない。もっとマニュアルを読みましょう。> 自分

でも、PHPの場合、たまにバージョンアップをしていくと、推奨の関数ではなくなるとかあるのでとってもマイナーな関数は注意が必要かもしれない。

Bookmark this on Google Bookmarks
このエントリーをはてなブックマークに追加
Bookmark this on FC2 Bookmark
Bookmark this on Livedoor Clip
Share on GREE