スタッフブログ

  • 最新配信
  • RSS

PHPでマルチバイトの文字数を数える

 : PHP 2008/10/8 21:58

Blogger's Avatar

PHPで文字列の文字数を数える場合,strlen関数を利用して以下のように書きます.
php -r '$re = strlen("テスト"); var_dump($re);'
「テスト」は3文字なので3が返るはずです.しかし,このコードの実行結果は9が返ります. これはstrlenがマルチバイトを考慮していない為です.strlenの場合,文字数というよりはバイト数を表示しています. PHPでマルチバイト文字列をカウントするにはmbstringに含まれるmb_strlen関数を使います.以下はmb_stringを利用した場合のコードです.
php -r '$re = mb_strlen("テスト"); var_dump($re);'
しかし私の環境では,このコードを実行してもやはり9が返ってきました.mb_strlenは与えられた文字列を内部エンコーディングでカウントします.内部エンコーディングはmb_internal_encoding()関数を利用する事で確認できるのですが,結果はISO-8859-1でした.サーバ自体のlangはUTF-8なのであっていません.そこで以下のように書きかえました.
php -r '$re = mb_strlen("テスト", "UTF-8"); var_dump($re);'
これでようやく3という数字がでました.mb_strlenは第二引数を指定する事で任意の文字コードとしてカウントできる為,これを利用する事でマルチバイト文字を正しくカウントできるようになります. 内部エンコーディングを正しく設定しておくのもこうならない為の対策の一つではありますが,それに加えて,mb_strlenを利用する場合は明示的にエンコードを指定しておいたほうが間違いがなくなって良いかもしれません.

CRON覚え書き

naoto : 技術全般 2008/10/7 19:11

Blogger's Avatar

こんばんわ。なおとです。

つい最近の仕事のことですが、CRONを使った自動実行について手間取ってしまったので、復習をしておきます。 以下はあくまで一例で、OSの違いなどでバリエーションがありえます。

CRONTAB

  • ユーザ毎のCRONTAB
    • /var/spool/cron/∗ など
  • システムのCRONTAB
    • /etc/crontab [600 or 644] root
    • /etc/cron.d/∗ [600 or 644] root

あるCRONのジョブを実行するタイミングと、その内容を登録するところです。/etc/crontabはできるだけ編集しないのが作法です。

典型的なタイミング(毎日深夜、など)で実行する処理は、ここで登録しなくても用意されているディレクトリにスクリプトを置いておけば、実行されます。

システムのCRON用スクリプト

実際にはCRONTABの中では複雑なことは書きづらいので、シェルスクリプトなどを登録しておきます。目的の処理をする実体は、そのスクリプトの中に記述します。

  • /etc/cron.daily/∗ [755] root
  • /etc/cron.hourly/∗ [755] root
  • /etc/cron.monthly/∗ [755] root
  • /etc/cron.weekly/∗ [755] root
  • ほか [755] ∗ など

CRONTABをユーザーに持たせるとどこにいったのか分かりにくくなることがあるので、できれば避けます。今回もその辺を整理してすっきりしました。

CRONとapacheで共通の処理対象があるとき

CRONのジョブからなにかファイルを生成するとき、apache httpdからも同じディレクトリ/ファイルを操作することがある場合には、ファイルやディレクトリの所有者、実行権限に気をつけます。具体的には次のような仕込みをします。

共用するユーザは、ある共通のグループ(たとえば、apacheグループ)に参加させておきます。 生成されるファイルを置くディレクトリには、セットグループIDをつけておきます。

CRONのジョブは、rootではなくapacheユーザで実行します。 システムのCRONTABでは、実行時のユーザを指定するようになっているので、/etc/cron.d/を使います。

そこに登録しておいたスクリプトの実行時ユーザはapacheになり、生成されるファイルの所有者とグループもapacheになります。 以上です。

ここにFTPやファイル共有なども絡むともう少し考えることが多くなるかもしれませんが、だいたいこれでOKです。 こういうことは忘れやすいので、ときどきは実際に手を動かしておかないと身につかないものですね。

PHPの組み込み関数の変な挙動

 : 技術全般 2008/10/3 10:23

Blogger's Avatar

satoです。
PHPは、昨日のほとんどが組み込み関数によって実装されているため、各関数の命名規則はprefix等で統一されていることが多いです。
しかし、中には命名規則が一致してないのに似たような挙動をするものがあったり、一致しているのに微妙に挙動が違うものがあります。今回はsatoが気になった例を紹介します。

・array_pop/array_shift
配列の最後の値を取り出すarray_popと、配列の最初の値を取り出すarray_shiftですが、若干挙動が違います。
array_popはそのままなのですが、array_shiftは
array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。 数値添字の配列のキーはゼロから順に新たに振りなおされますが、 リテラルのキーはそのままになります。
PHP: array_shift - Manual
とあります。 つまり、
array(100=>'a', 110=>'b', 120=>'c');
という配列があった場合、array_popの結果は
array(100=>'a', 110=>'b');
ですが、array_shiftは
array(0=>'b', 1=>'c');
となってしまいます。 array_popと対象の動作を行いたい場合は、array_sliceの$preserve_keysをTRUEにして動作させるとうまく行きます。ただしPHP5専用なので、PHP4では他の方法で行う必要があります。

他にも似たような例は存在すると思うので、気になる場合は必ずPHPマニュアルを参照するようにしましょう。

今週末はOSC2008 Tokyo/Fall

Ryuji : イベント 2008/9/30 20:36

Blogger's Avatar

今週末の金曜、土曜の2日間にわたり、オープンソースのお祭り「オープンソースカンファレンス2008 Tokyo/Fall」が、大田区産業プラザPIOにて開催されます!

オープンソースカンファレンス2008 Tokyo/Fall

■XOOPS関係は「ホダ塾ディストリビューション」
XOOPS関係では「ホダ塾 XOOPS Cube ディストリビューション」のセッションが10月4日(土曜)の10時15分から予定されています。

XOOPS Cube Legacy ディストリビューション「HD」の紹介

うさぎにもできるXOOPS Cube入門♪」でもおすすめしてますが、最新のXOOPSを使ってのWebサイト構築を楽しむなら、XOOPS Cube Legacy 2.1.xを単独でダウンロードしてくるよりも、このセッションでも紹介予定の「ホダ塾ディストリビューション」を使うのが断然おすすめです。

もしかしたらセッション内容が変わるかも?という話も小耳にはさみましたが、XOOPSの動向が気になる方は、是非セッションを聞きにいってみましょう!

先ほどOSC2008Tokyo/Fallのサイトを見たら「空席わずか」となってましたので、早めに申し込みましょう!


さて、で私は?というと、
■WARP Web Application Rapid Package
「WARP」というWebアプリケーションごった煮インストール済みパッケージの方で参加します。

こちらのセッションは10月3日(金曜)14時開始です。

warp を使ってWebアプリケーション間連携を体験する

セッションまで残り数日しかありませんが、セッションまでにWARPに今後入れたいと思ってるネタの準備をしたいと思います。

それでは、週末に、OSC2008Tokyo/Fallの会場でお会いしましょう!

XOOPSタイムカードモジュール 作り中

mik : XOOPS » 総合的な情報 2008/9/29 22:51

Blogger's Avatar

タイムカードモジュールを作り中です。

以前から持っていた愛機「ピンクのバーコードスキャナ」でIDを読み取り、「出社」「帰宅」を打刻します。

まだ管理画面ができあがっていないので社内でのみ使っていますが、今までの手書き(^^;に比べるとずっと楽になりました。

使い始めて思ったのは

・もしもスーパーみたいにかざすだけでバーコードが読み取れたらもっと楽♪

ってことです。これについてもオートモード切替のあるバーコードスキャナを購入すればおっけ〜、になるのでそのうちそれも買ってもっと楽に打刻できるようにしてみたいなと思っています。

タイムカードモジュール、ご興味あるかたいらっしゃいますか??

そのうちちゃんと完成したら公開したいと思ってます〜

LinuxでGIMPより使いやすいレタッチツールを使う

 : 技術全般 2008/9/26 12:48

Blogger's Avatar

haltです。
Linuxをメインで使うようになると、WindowsやMacにあるPhotoshopのような優秀なレタッチツールがない事に気づきます。
「LinuxにはGIMPがあるじゃないか!」とよく言われるのですが、あれをPhotoshopと同じように使いこなすのは私には無理でした。
自分がレタッチツールを使う時はプレゼン資料を作る程度なのでレイヤー機能と基本的な画像編集機能、各種メジャーフォーマットへのかきだし機能がついていれば満足。というわけでその条件を満たすソフトを探していたら、paintgraphic2にあたりました。

http://www.sourcenext.com/titles/hob/76440/

Windows用のソフトですが、wineを使えば普通に使えます。まだあまり使いこなせていませんがPhotoshopにインターフェイスがにているので簡単な事ならすぐにできるようになります。Photoshopのようなプロのツールと比べて値段が安いのも素敵です。

linuxにはwineという裏技があるのでLinuxで良いソフトがない時はWindowsの便利なソフトをLinuxで使ってみると良いと思います。

弊社からの道順、夜の散歩編。

naoto : その他 2008/9/24 18:18

Blogger's Avatar

なおとです。今回は業務とも技術とも絡まない話題をします。

ご存知の通り、Web業界のエンジニアというのはデスクワーク中心、しかも手先だけでなく、いかに頭を使うかが問われる仕事です。そんなに毎日を送っていると、運動不足、ストレスがたまった状態に陥りがちです。最早よくある話です。そこで私が実践している、日頃の運動について語ってみたいと思います。

朝はどうにも忙しいのですが、弊社は帰りが比較的早くて、そうでなくても帰り道でもなければ運動をする機会ってなかなかないものです。 私は会社帰りに、神田淡路町から茗荷谷までを歩きます。道のりはだいたい丸ノ内線に沿って、調子に合わせて途中で電車に乗ったり、そのまま池袋まで行くこともあります。

弊社への道順の番外編をどうぞ。

...続きを読む

Googleドキュメントを使って、簡単にXOOPSにアンケートフォームをつける方法

Ryuji : XOOPS » TIPS小ネタ 2008/9/18 2:05

Blogger's Avatar

Googleドキュメント使ってますか?
Googleドキュメントは、無料で発行されるGoogleのアカウントさえあれば、どなたでも使えるサービスで、Wordのような「文書」やエクセルのような「スプレッドシート」を作成できる便利なサービスです。

Googleドキュメント

このGoogleドキュメントのスプレッドシートに、登録用フォームを作成する機能があります。
この機能を使うことで、簡単にアンケートフォームを作成して、エクセルのような表にアンケート内容を記録することができちゃいます。

では手順を説明しますね。

...続きを読む

株式会社カメレオン様

mik : その他 2008/9/18 0:01

Blogger's Avatar

WEBをお仕事にされている、したいと思っている方のためのSNSを検索していて

andromeda
http://www.andromeda8.com/

というSNSを見つけました。てっきり招待制だと思い、誰か知ってる人いないかなーと制作会社を見てみたらなんと昨年春に名刺交換をした 株式会社カメレオン さんでした。

とはいえ一度お会いしただけだったのでいきなり招待してくださいとも言いにくいなぁと思いつつサイトをいろいろ拝見していたら当時は別のところだったのですが現在の事務所はなんと弊社から徒歩10分以内ぐらいのところに。会社規模も当社と同じぐらい、社内blogを見ているとだんだん興味が湧いてきてついにメールをしてみました。

早速お返事をいただき、実は招待制でなく新規登録がサイトからできることがわかったのですが、これも何かの縁と本日カメレオンの福留さんが弊社を訪ねてきてくださいました。

これもまた偶然なのですが、弊社のビル2Fにある貸し会議室で行われている朝食会に参加されているとのこと。こういうところもご縁だなぁと思いつつ。

カメレオンの福留さん、弊社社長と私とでIT業界のあれこれや今後の方向性など意義のあるお話をさせていただきました。

株式会社カメレオン
http://www.kameleon.jp/

また本日社長ブログに弊社訪問の際のことを書いていただきました。
http://ameblo.jp/kameleon/entry-10140323009.html

エールの交換ではないですが私も同じように大変興味深いできごとでしたのでblog記事にさせていただきました。

カメレオンさんはandromedaのようにOpenPNEを導入したり、EC-CUBEを利用したショッピングサイト、WEBデザイン、MovableTypeを利用したサイトなど幅広い業務をされています。

社内勉強会でOpenIDについて話しました

 : 技術全般 2008/9/12 18:19

Blogger's Avatar

satoです。
弊社では毎週金曜日に何か発表とかがあるのですが、今回はOpenIDのRPの実装方法について話しました。
プレゼン資料を置いておきますので、参考になれば幸いです。(カーソルキーで操作します)

OpenID RPの作り方

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階

Copyright(c) 2012 RYUS.All Rights Reserved.