山本 悟 のすべての投稿

HTMLファイルでも PHP ファイルとして見なす(php_flag short_open_tag off

先々日、.htaccess を利用することで、.html ファイルも PHP ファイルとして処理する方法を紹介しました。
しかし、そのとき足りなかったことがあるので追記します。
足りなかったのは、<?xml ~?> などのタグが入っている HTML ファイルの場合、<?~?> 部分を PHP として解釈しようとしてしまい、エラーを起こしてしまうのの、回避策です。
知ってしまえば簡単ですが、.htaccess に以下の1行を追加するだけです。
php_flag short_open_tag off
php.ini をいじれる環境であれば、この内容も設定できるのですが、ホスティングサービスなどで動かしたい場合には、今回の方法が有効ですね。
ただし、全ての .html ファイルを PHP として解析しますので、全体のパフォーマンスはわずかながら落ちますので、適用は考えてから行うようにしてください。
山本 悟

xajaxを使ってみた

こんにちは、山本です。
標題の通り、xajax を使ってみました。
端的に言えば、JavaScript を(ほとんど)書かずに、PHP のプログラミングテクニックだけを使って Ajax の実装(表現がいまいち)できるクラス群です。
しかし、ちょっとつまずいたことがあるので、メモしておきます。
Smarty との連携を行う場合、私は1つの HTML を生成するのに複数のテンプレートを Smarty 内で include しています。
しかし、printJavascript() を呼ばなければならないのは(安全を考えれば) HEAD タグの内側です。
しかし、Smarty の display() では、その PHP オブジェクトの制御が出来ないため、JavaScript を生成できません。
当然オブジェクトの参照が渡されるわけではないので、{php}{/php} テンプレートタグ内で記述しても意味がありません。
呼び出し側の PHP 内で $Smarty->fetch() して、$xajax->getJavascript() を埋め込む方法も考えたのですが、テンプレートが大きいと単純置換でも無駄が多そうです。
結局、$xajax->getJavascript() を Smarty 変数として渡す方法をとりました。
大丈夫かな。
山本 悟

ZendFrameworkでメールを送ってみた(修正

こんにちは、山本です。
昨日作った ZendFramework のメール送信のサンプルですが、Willcom 端末で上手く表示されない場合がありました。
どうやら、文字コードが8bitエンコードなのが問題のようです。
$mail->setBodyText(mb_convert_encoding(‘テストだ’, ‘ISO-2022-jp’, ‘UTF-8′), ‘ISO-2022-jp’, Zend_Mime::ENCODING_7BIT);
解決する方法は、setBodyText() を呼び出す段階でエンコードを7bitに指定してあげることでした。
このサンプルは UTF-8 で保存しています。
山本 悟

ZendFrameworkでメールを送ってみた

こんにちは、山本です。
ZendFramework 1.0.1 を実験してみました。
なかなか柔軟性が高く、既存のプロジェクトに追加して使う場合でも、導入のハードルは低そうです。
さて、今回メールを送るプログラムを書いてみたのですが、日本語を送る場合には、文字コード指定がやはり必要でした。
備忘録として書いておきます。
$mail = new Zend_Mail(‘ISO-2022-JP’);
$mail->setBodyText(mb_convert_encoding(‘本文だ’, ‘ISO-2022-jp’, ‘UTF-8′));
$mail->setFrom(‘from@example.com’);
$mail->addTo(‘to@example.com’);
$mail->setSubject(mb_convert_encoding(‘見出しだ’, ‘ISO-2022-jp’, ‘UTF-8′));
$mail->send();
ポイントは、Zend_Mail のインスタンスを生成する際に、文字コードを文字列として渡してあげること、本文やサブジェクトをエンコードして渡してあげること、の2点のようです。
このサンプルは UTF-8 で保存したものです。
山本 悟

Delphi for PHPで MySQL を使う際の言語設定について

こんにちは、山本です。
CodeGear の製品である Delphi for PHP Update 1 を利用して、MySQL と連携したアプリケーションを作成する場合、問題となるのが文字コードです。
通常は次の様に接続すると思います。
Database1 の諸設定
Table1->Database = Database1
Datasource1->Dataset = Table1
DBGrid1->Datasource = Datasource1
しかし、この状態では、例え MySQL の言語設定が UTF-8 であったとしても、画面上の文字は化けてしまいます。デフォルトの文字コードが利用されてしまうからのようです。
これを解決するには、MySQL に対して利用する文字コードを指定すれば良いでしょう。
具体的には、Database1 の AfterConnect イベントで SQLを発行します。例を示します。
function Database1AfterConnect($sender, $params)
{
    $this->Database1->execute(‘SET NAMES utf8;’);
}
期待の大きい開発環境が故に、情報の少なさが残念です。
もっとメジャーになってもらいたいと本当に思います。
○確認した環境
Delphi for PHP Update 1
mysql  Ver 14.12 Distrib 5.0.41, for Win32 (ia32)
山本 悟

Excelのファイルがダブルクリックで開かない

そんな問い合わせを受けました。
電話で話をすると、「ファイル|開く」などは大丈夫なようですが、エクスプローラなどでダブルクリックしても、Excel は立ち上がるだけで画面は灰色のままとのことです。
OS 側の関連づけの問題かと思って確認したのですが、それも問題なし。
Word なども問題なく動作します。
なので、OS の Excel 呼び出しの問題ではなく、Excel 自身の問題と考えたところ、設定にありました。
設定方法をまとめておきます。
 ○Office 2007 の場合

「Officeメニュー|Excel のオプション」で「Excel のオプション」ダイアログを開く
「詳細設定」の「全般」項目にある、「Dynamic Data Exchange (DDE) を使用する他のアプリケーションを無視する」のチェックを外す

○Office 2003 の場合

「ツール|オプション」で「オプション」ダイアログを開く
「全般」タブにある、「他のアプリケーションを無視する」のチェックを外す

でも、なんでこの設定が変更されてしまったのかは、謎のままです。

Windowsの環境情報を取得する

仕事の絡みで Windows を取得する方法を検討していました。
プログラムで取得するなど様々な方法がありますが、結局次の方法に落ち着きました。
●GUI の場合
msinfo32.exe で情報を作成し、nfo 形式で保存する。
●CUIの場合
systeminfo で情報を作成し、ファイルへリダイレクトする。
例) >systeminfo /FO CSV > test.csv