PHP・MySQL

2011年7月 1日 (金)

日本語化 Eclipse 3.6 Helios ヘリオス設定違い

Eclipse 3.6 Heliosの日本語版(pleiades-e3.6-ultimate-jre_20110326.zipだと思う)に入っているxampp1.7.4の設定が間違っています。

phpで $_SERVER['TMP']を使おうとしたところうまく動きません。 $_SERVER['TMP']の値を確認すると\\xampp\\tmpとなっていました。
apacheのconfファイルを探すとC:\user\xampp\apache\conf\extra\httpd-xampp.confgに次のような設定がありました。

<IfModule env_module>
    SetEnv MIBDIRS "C:/user/xampp/php/extras/mibs"
    SetEnv MYSQL_HOME "\\xampp\\mysql\\bin"
    SetEnv OPENSSL_CONF "C:/user/xampp/apache/bin/openssl.cnf"
    SetEnv PHP_PEAR_SYSCONF_DIR "\\xampp\\php"
    SetEnv PHPRC "\\xampp\\php"
    SetEnv TMP "\\xampp\\tmp"
</IfModule>

4箇所をC:/user/xampp/・・・に変更しました。

これまでタイムゾーン、PEARのフォルダなどに設定の間違いが見つかっています。他にもあるかもしれませんね。とりあえずデバッグすることは出来ています。

2011年6月13日 (月)

phpのタイムゾーン

日本語化済みHelios Service Release 2に同梱されているxampp1.7.4のphpで

date('Y/m/d H:i:s')

で取得した時間がずれている。よく調べると 9時間ずれている。
そこでphp.iniを確認すると

date.timezone が Europe/Berlin になっていたので以下のように変更した。

[Date]
;date.timezone = Europe/Berlin
date.timezone = Asia/Tokyo

以前は時間が合っていたので日本語化済みHelios Service Release 2に変えてからだと思う。使用している人は確認が必要かも。

2011年6月 9日 (木)

MySQLに他マシンからネット経由で接続するためには

MySQLに他マシンからネット経由で接続するためには

クライアントからの接続
サーバーsrv、ユーザーuid、パスワードpassでデーターベースdbに接続するには

mysqlコマンド

mysql -h srv -u uid -p db

PHPのMDB2で接続する場合

$dsn = 'mysql://admin:pass@srv/db';

接続できればOK

サーバーの設定
・ポートを開ける
デフォルトの3306を開ける

ユーザーの作成
デフォルトのrootはlocalhost以外は接続できない
接続できるユーザーを作成するmysqlコマンドでrootでログインして

grant all on db.* to admin@”192.168.0%” identified by 'pass' with grant option;

all                   操作全て(select とすると検索のみ)
db.*                データベースdbの全テーブルを許可
admin              ログインID
"192.168.0.%"    許可するホスト(コマンドのところは全角でないと入力できなかった
pass                 パスワード
with grant option  権限を与える権限

192.168.0内から接続できるrootと同等のユーザが作成できる。

my.iniの変更
mysql/bin/my.ini(windowsの場合?)の[mysqld]に
bind-address = 127.0.0.1
がある場合はコメントアウトする

2011年6月 2日 (木)

PHPメニュー画面処理

PHPのメニュー画面を作成し処理を振り分けるのに、処理ごとに.phpファイルを作成しaタグやformタグでそれぞれの処理に飛ぶようなメニュー画面を作成できます。処理を追加したりする場合はメニュー画面を修正すればメンテナンスできます。しかし、修正作業を行うときにバグを組み込む危険があります。
テキストファイルやデータベースにメニュー定義を登録しその内容でメニュー作成すればメニュー画面の更新は不要になります。定義をミスれば目的どうり動かないのだが。
また、通常各処理の初めや終わりに共通の処理が必要になることが多い。そこでメニュー画面から起動されるファイルを一つのphpファイルにし、その中で処理を振り分けるといろいろ都合が良くなる。
以下にその処理の例をしめす。メニューの定義はarrayで記述されているがこのデータを定義ファイルやDBから読み出せばよい。

--- menu.php ---
<?php

$menuList = getMenuList();   // メニュー表示データ取得

if (is_null($_POST['job'])) {
    disp_menu($menuList);
} else {
    include_once($menuList[$_POST['job']]);
}

// メニューの定義情報を返す
function getMenuList(){
    $r = array(
        '000001'=>'1.php',
        '000002'=>'2.php'
    );
    return $r;
}

// メニュー画面を表示する
// (メニュー定義情報から生成する)
function disp_menu($menuList){
    echo '<form action="" method="POST">';
    echo '<input type="submit" value="1"/>';
    echo '<input type="hidden" name="job" value="000001"/>';
    echo '</form>';
    echo '<form action="" method="POST">';
    echo '<input type="submit" value="2"/>';
    echo '<input type="hidden" name="job" value="000002"/>';
    echo '</form>';
}

実行用のファイル1.phpと2.phpは以下のようにに記述すればよい。

--- 1.php ---
<?php
echo '1.php実行';

--- 2.php ---
<?php
echo '2.php実行';

参考:phpファイルの最後の ?> は記述不要です。?>の後に改行など入れるとブラウザに送られてしまい思わぬ誤動作をすることがあります。

2011年5月24日 (火)

Eclipseのブレークポイントで止まるとapacheが停止する

elipseのブレークポイントの動作でApacheが停止する不具合がとりあえずの対応策が見つかったので本記事を書き換えました。

eclipseのHelios Service Release 2(日本語化済みをダウンロード)で

・ブレークポイントで停止
・変数ビューが上にあり変数が表示される状態

「Apache HTTP Server は動作を停止しました」

と表示しApacheが停止してしまい変数を表示することができない。
変数ビューが隠れている状態でブレークポイントで停止した場合はステップ実行など問題なくできる。変数ビューの表示のみできないと思われる。

Webを検索すると以下の気になる記述を見つけた

・Xdebugのdllの修正版がある。
・Apacheのデータをダンプする領域のアクセス権の問題がある。
・Apacheをサービスで実行しない。

などが見つかった。これらの試行錯誤をした結果以下の状態で動作するようになった。

・php_xdebug-2.1.1-5.3-vc6.dllをダウンロードし入れ替える(php.ini編集)
 これが必要かどうかはわからない、替える必要は無いかもしれない
・xampp-control.exeを「管理者として実行」で起動しApacheをスタートさせる。
・eclipseを「管理者として実行」で起動する。

以上でブレークポイントで停止し変数も表示することができるようになった。

以下の確認作業をしました(作業順はずれている可能せいはあります)

・X60のHDDをSSDに入れ替えWindows7をインストールしたマシンでは動作する。(X60でも発生するようになってしまいました)
・X60で動作しているプログラムをそのままコピーして実行しても不具合発生する。
・新規にダウンロード・展開しても不具合発生する。
・MSIのG31マザーのマシンで不具合は発生している。
・MSIマザーに別のSSDを付け新規にWindows7をインストールしても不具合は発生する。
・xdebugのdllをいろいろダウンロードしてきて入れ替えてみたが不具合は発生する。
・xampp-control.exeでApacheをサービスとして登録しようとしてもサービスにできない。
 「管理者として実行」で起動したらサービスとして登録できた。が不具合は発生する。
・Apacheはサービスで実行しないという記述を見つけたので、サービスをやめ
 xampp-control.exeを「管理者として実行」で起動しApacheをスタートさせる。

ここで「Apache HTTP Server は動作を停止しました」はでなくなったが

「Unexpected termination of script, debugging ended.」が出るようになった。
これはeclipseから出ているようなのでeclipseも「管理者として実行」で起動したら動作するようになった。

「管理者として実行」で起動するのが少し面倒であるが(ショートカットまたは本体のぷろぺてぃで管理者として実行するの設定があった)一応動作するようになった。

それにしてもThinkPad X60 では同じWindows7で調子よく動いている(X60も同じになりました)。Windows7も新規にセットアップしなおしてもだめだった。
以上:2011/06/12

Atacheをサービスとして実行した場合をテストしました。

Atacheをサービスとして実行した場合やはり不具合が発生しました。
原因として考えられるのはサービスはシステムアカウントユーザで実行されるため、eclipseのユーザと異なるためだと思います。Administratorでサービスを実行させようと思ったのですがアカウントを有効にしただけでは駄目でパスワードなども設定する必要があったのでやめました。なのでxampp-control.exeのショートカットを管理者で起動するように設定して起動することにしました。

Vistaでも発生しているようなので。Visatから導入されたAdministrator権限のユーザーでも必要になった(とWindowsが感じた)ときにAdministrator権限で実行するとう機構が関係しているみたいです。

以上:1011/06/13追記

以下旧記述

eclipseのブレークポイントでおかしな動作の対応のメモ

eclipseでPHPをデバッグするためにブレークポイント設定し実行した場合、ブレークポイント停止後のステップ実行で動作がおかしくなりデバッグできなくなる。

動作していたときが変えた設定などを戻したり変えたり、PCを再起動などいろいろしたが改善しなかった。

最後に「PHPデバッグ」パースペクティブでブレークポイントを右クリックし「全て除去」を実行したあと正常動作し始めた。

追記:
ブレークポイントをクリアしたら動き出したと書いたが、変数ビューを表示してブレークポイントで停止したとき、またはブレークポイントで停止しているとき変数ビューを表示した時にApacheが停止しましたとなる。変数ビューがブレークポイントビューの下にあったり、×ボタンで消したときにはステップ実行などでき問題ない。この現象はMSIのG31のマザーでWindows7にて発生する。ソフトウェアRAID0など疑い解除したり、別SSDに新規にWindows7をインストールしたり、BIOSのCPU関係の設定を変更したが改善しなかった。同一環境をThinkPadX60でWindows7の環境、LibbretU100のXP Proの環境では変数が表示できる。

現状MSIマザーブレークポイントで停止変数を表示したときがNG。

2011年5月12日 (木)

FPDFと日本語化

PHPでPDFドキュメントを作成できるFPDFとその日本語化をしてみた

FPDFはPHPでPDFドキュメントを作成できる。作成したドキュメントはクライアントにダウンロードされ画面表示することができる。サーバーのローカルファイルとして保存もできる(ようだ)。

使用したxamppにはすでにPEARでFPDFがインストールされていた。それを知らずにFPDFをダウンロードし日本語化などしていました。うまく動作しないところがありいろいろ調べたところPEARで入っていることがわかりました(これは問題の動作とは関係ありませんでした)。
また、PEARはインストーラで追加/削除されるのでこれに日本語化でモジュールを上書きした場合のPEARのインストーラの動作がわからないので、別途FPDFをダウンロードしincludeフォルダを作成しinclude_pathにincludesフォルダを先に指定することで対応しました。

インストールは以下以下の手順で実施
1.FPDF 1.51をダウンロードしincludes\fpdにコピー
2.php.iniのinclude_pathにincludesフォルダを追加
  include_path = ".;C:\user\xampp\php\includes;C:\user\xampp\php\PEAR"
3.日本語化モジュールmbfpdf10b.zipをダウンロードし展開しinclude\fpdに上書きする。
  上書きされるファイルはなく追加のみ。
4.サンプルファイルexja.phpをクライアントからアクセスできる場所にコピーし、require定義にfpdf/を追加。
  require('fpdf/mbfpdf.php');
  include_pathにfpdfを指定してあればfpdf/の追加は不要。
5.クライアントからexja.phpを開く日本語PDFが生成されブラウザに表示される。

動作確認中にrequire('fpdf/mbfpdf.php');の記述がプログラムの先頭にある場合問題ないが、プログラムの途中でrequireされたプログラムの途中でrequire('fpdf/mbfpdf.php');を記述した場合関係なさそうなエラーになる。エラーメッセージに関係しそうなところからいろいろ調べてみたが解決しなかった。結局プログラムの最初の段階にrequire('fpdf/mbfpdf.php');を記述することにより問題は発生しなくなった。

mbfpdfで使用できる日本語フォントはexja.phpで使用しているフォント程度でWindowsで使用できるフォントを使用することは出来ない(mbfpdfに変換ツールらしいものがあるので追加可能かもしれない)。

mbfpdfはfpdfのページにリンクがあるがこのリンクではファイルが見つからない。zipファイルのリンクになっているがzipファイルを外したアドレスで開くことができ、そこにリンクがあるのでここからダウンロードできる。しかし、このリンクはfpdfにあるリンクと同じファイルを指している。外部からの直接リンクを止めなどしているのでしょうか。

使用できるフォントは少ないがゴシック/明朝/プロポーショナルなど一応使用できるので使えそうです。

2011年5月 9日 (月)

eclipseでCVSから既存プロジェクトをチェックアウト(読み込む)

CVSからプロジェクトをチェックアウトしeclipseに読み込む

1.[ファイル][新規][その他]を選択
2.[CVS][CVSからのプロジェクト]
3.リポジトリを入力するか選択する
4.[既存のモジュールを使用]選択の場合6へ
  [新しいリボジトリロケーションを作成]
5.[ホスト]のコンピュータ名(/や¥などは不要)
  [リポジトリ]に/var/lib/cvsrootなどを入力
  [ユーザ]にログインIDを入力
  [パスワード]入力不要
  [次へ]ボタンクリック
6.[パスワード]入力
7.[プロジェクト名]を必要なら変更
8.[完了]ボタンクリック

2011年5月 8日 (日)

日本語化 Eclipse 3.6 Helios ヘリオスのインストール

日本語化 Eclipse 3.6 Helios ヘリオスのインストール

Eclipseを日本語環境で使用するには日本語のプラグインをインストールしなければならない(日本語のプログラムの開発は問題なくできる)。
そこでプラグインを探そうと検索してみると日本語版のフルセットのEclipseをMargeDoc Projectで配布していることがわかった。それは、Eclipse 3.6 Helios、Eclipse 3.5 Galileo、Eclipse 3.4 Ganymede、Eclipse 3.3 Europaの基本、フル、Java、C/C++、PHPなどの開発環境用が提供されている。PHPの開発に使用予定ですがHeliosのフルセットをダウンロードしたのでそのときの手順を示す。

  1. Eclipse 3.6 HeliosのUltimateのFull All in One (JRE あり)をダウンロード(http://mergedoc.sourceforge.jp/
  2. pleiades-e3.6-ultimate-jre_20110326.zipを解凍
    pleiades-e3.6-ultimate-jre_20110326.zipを右クリックし「すべて展開」を選択
    「展開先の選択とファイルの展開」にて展開先をC:\userに変更し「展開」ボタンをクリック
  3. C:\user\xampp\setup_xampp.batを実行する
    説明では入力要求があると書かれているが何も入力なしで終了する。
  4. C:\user\xampp\setup_control.exeを実行し「Apache」と「MySql」を起動する。
  5. C:\user\elipse.exeを実行する。

以上でPHPの開発環境(実行環境を含む)のインストールが完了。

エディタのフォントなども変更されているのでインストールするだけで日本語環境が使用できる。

2011年5月 6日 (金)

MySQLメモ:トランザクション処理

MySQLでトランザクション(コミット、ロールバック)処理するにはストレージエンジンにInnoDBを使用する、指定なしの場合はMyISAMが使用される。

例:

InnoDBのテーブルを作成する時に指定する

CREATE TABLE sample (
id MEDIUMINT,
name TEXT,
PRIMARY KEY(id)
) CHARACTER SET utf8 ENGINE=InnoDB;

既存のテーブルのストレージエンジンをInnoDBに変更する

ALTER TABLE sample ENGINE=InnoDB;

既存のテーブルのストレージエンジンを標準のMyISAMに変更する

ALTER TABLE sample ENGINE=MyISAM;

2011年1月30日 (日)

Eclipse PDTでブレークポイントによるデバッグ

eclipse PDTを使ったデバッグ環境を構築

XAMPPとPDTの環境でブレークポイントで停止できるように出来た。

ダウンロード・展開・コピー
以下のファイルをダウンロード・展開・コピー
xampp-win32-1.7.4-VC6.zip     XAMPP 1.7.4 [PHP: 5.3.5]
eclipse-php-helios-win32.zip

php.iniの修正
XDebugを使用するためのC:\xampp\php\php.iniの変更。
1行のコメント解除と1行の追加。

--org start---
[XDebug]
;zend_extension = "\xampp\php\ext\php_xdebug.dll"
--org end---

--mod start---
[XDebug]
zend_extension = "\xampp\php\ext\php_xdebug.dll"

xdebug.remote_enable=true
---mod end---

実行
プロジェクトhのh.phpファイルをデバッグする

XAMPP Controlerを起動しApacheをスタート
eclipseを起動し設定する
[Window][Proferences]
    [PHP][PHP Excutables] [add]
        [name:] "xampp php"
        [Excutable path:] "C:\xampp\php\php.exe"
        [PHP ini file:] "C:\xampp\php\php.ini"
        [PHP debugger:]="XDebug"
    [PHP][Debug] [PHP Debugger:] "XDebug"
プロジェクトを作成しphpファイルを作成する。
[Run][Debug Configurations...]
[Sever Debugger:]="XDebug"
[File:]="/h/h.php"
適当にブレークポイントを付けて
[Run][Debug]で実行する

eclipse内のブラウザが動きブレークポイントで停止する