1315713056 phpの勉強をしています。

PEARのインストールができなくて悩んでいます。
PHPのバージョンは5.3.6です。
PHPをC:\PHPに入れいて、c:\phpでgo-pearを実行します。
画像の通り、出てきたところで、Enterを入れます。
no write access to c:\Windows\pear.ini!
と出てきます。
PEAR::HTML_QuickFormライブラリをインストールしようとして、
pear install HTML_QuickForm
とやりますが、インストールできません。
pear install -a Auth
ともやりますが、インストールできません。
c:\phpで、php pear\DB\DataObject\createTables.php "D:\Apache2.2\htdocs\samples\chap06\myConfig.iniとやると、
DB_DataObject error connect failed;turn on debugging to 5 see why
と出てきます。
muConfig.iniは、
[DB_DataObject]
database="sqlite2://localhost/d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"
schema_location="D:\Apache2.2/htdoc2/sample/chap06"
class_location="D:\Apache2.2/htdocs/samples/chap06"
require_prefix=DataObjects/
class_prefix=DataObjects_
debug=0;
です。
DataObjectのエラーを無くしたいのですが、どうしたら良いのですか?

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2011/09/18 12:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.3

回答回数595ベストアンサー獲得回数351

ポイント33pt

1. chap06.sqliteはSQLite2のデータベースですか?

明確な記述を見つける事はできませんでしたが、私の方で試した限りSQLite3には対応していないようです。



2. myConfig.iniの「database="sqlite2:~」を「database="sqlite:~」に修正してください。

※PEAR::DBで対応しているphptype(データベースバックエンド)に「sqlite2」はありません。

※「localhost」を省略して「database="sqlite:///~」のように書くこともできます。


[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"
schema_location="D:\Apache2.2/htdoc2/sample/chap06"
class_location="D:\Apache2.2/htdocs/samples/chap06"
require_prefix=DataObjects/
class_prefix=DataObjects_

http://pear.php.net/manual/ja/package.database.db.intro-dsn.php



3. php.iniの「extension=php_sqlite.dll」を有効にしてありますか?

「docs/DB/doc/STATUS」に「sqlite PHP 5: extension.」とあるように、PHP5はsqlite拡張を使用するようです。



※myConfig.iniの場所はどこでも大丈夫です。



【返信への回答追記】


myConfig.iniで「database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"」としているのでしたら、出来るファイルは「chap06.sqlite.ini」と「テーブル名.php」です。

chap06.sqliteにbookテーブルを作成済みなのでしょうか?

schema_locationに「chap06.sqlite.ini」が、class_locationに「テーブル名.php」が作成されているはずですので、myConfig.iniで各々に設定したディレクトリを確認してみてください。



【返信への回答追記2】


createTables.phpは、データベースを解析してデータベーススキーマとクラスファイルを作成するスクリプトのようです。

chap06.sqliteが空ファイルだと何も作成されません。

空データベースを対象に実行した場合、以下のように表示されませんでしたか?(「-- NO TABLES --」と出力されています。)


DB_DataObject_Generator   : 0       : CREATING FOR D:\Apache2.2\htdocs\samples\chap06\chap06.sqlite

DB_DataObject_Generator   : 0       : calling generateDefinitions
DB_DataObject_Generator   : 0       : Generating Definitions file:
DB_DataObject_Generator   : 0       : -- NO TABLES --

DB_DataObject_Generator   : 0       : calling generateForeignKeys
DB_DataObject_Generator   : 0       : calling generateClasses
DB_DataObject_Generator   : 0       : DONE


レコードが入っていなくても、テーブルがあれば次のように表示されます。


DB_DataObject_Generator   : 0       : CREATING FOR D:\Apache2.2\htdocs\samples\chap06\chap06.sqlite

DB_DataObject_Generator   : 0       : calling generateDefinitions
DB_DataObject_Generator   : 0       : Generating Definitions file:
DB_DataObject_Generator   : 0       : Writing ini as D:\Apache2.2\htdocs\samples\chap06/chap06.sqlite.ini

DB_DataObject_Generator   : 0       : calling generateForeignKeys
DB_DataObject_Generator   : 0       : calling generateClasses
DB_DataObject_Generator   : 0       : writing DataObjects_Diary

DB_DataObject_Generator   : 0       : DONE


chap06.sqliteにテーブルを作成して試してみてください。

※PHPで接続して作成してもいいですが、サンプルのデータベース作成等には、GUIツールを利用するのが簡単だと思います。


「SQLiteCC (SQLite Control Center)」

http://www.takke.jp/soft/sqliteccj.html


「TkSQLite」

http://reddog.s35.xrea.com/wiki/TkSQLite.html


※SQLite version2を扱えるソフトは、上記2つが便利そうでしたので、好みに合う方を使ってみてください。


※返信欄のcreateTables.phpの内容を比較してみましたが、こちらでインストールしたファイルと相違点はありませんでした。(「<php」の行が消えているのは、はてなの仕様だと思いますので)

コマンドで「pear list」で確認しましたが、該当するPEARパッケージのバージョンは以下の通りでした。


DB 1.7.14 stable

DB_DataObject 1.9.6 stable


※一つ気が付いたのですが、chap06.sqliteを置いたディレクトリが「d:/Apache2.2/htdocs/samples/chap06」なのに対して、スキーマ用のディレクトリが「D:\Apache2.2/htdoc2/sample/chap06」となっていました。(※私も最初の回答時点では気がつきませんでした・・・)

記述間違いがないか、myConfig.iniを再度確認してみてください。


[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"
schema_location="D:\Apache2.2/htdocs/samples/chap06"
class_location="D:\Apache2.2/htdocs/samples/chap06"
require_prefix=DataObjects/
class_prefix=DataObjects_


※書き忘れましたが、「pear.ini」はPEARのインストール時に作成されるPEARの設定ファイルですので、今回のDB_DataObjectの操作とは関係ないはずです。



【返信への回答追記3】


>『空データベースを対象に実行した場合、以下のように表示されませんでしたか?』『 →表示されませんでした。』


MyConfig.iniに「debug=0」の行があるのでしたら、削除してから実行してみてください。


> SQLiteのGUIツールを教えていただいたのですが、入るべき項目が恥ずかしながら分かりません。


各ファイルが「~\samples\chap06」に入っているようですが、何かの本のサンプルではないですか?

その本を所持していないので、入るべき項目は私にも分かりませんし、何をやろうとしているのかも分かりません。

今回使用していると思われる本の場合は、検索してサンプル(オープンソース)を見つけることができましたので、サンプルデータベースやファイルの中身については(たぶん)分かりました。

ただし、何をどのような順番で実行しながら覚えていくのかまでは分かりませんので、本を読んで確認してください。


サンプルのデータベースは「chap6.sqlite」で、bookテーブルの他、全部で6つのテーブルがありました。

createTables.phpで自動作成したと思われるファイルは、「Book.php」の他「Address.php」「Musician.php」があり、全部で3つありました。(すべて「chap6.sqlite」にあるテーブルです。)

とりあえず、bookテーブルだけ作成して実行すれば良いのかどうか分かりませんが、詳細は本の該当箇所を順番に読み進めて確認してください。(※「createTable.phpの実行でBook.phpが作成される」というような記述があるのでしたら、その解説文の時点ではbookテーブルだけ作成した状態で実行すればいいのではないかと思います。読み進めながら本の指示や実行結果に従って、データベースファイルの内容を追加していく必要があるのだと思います。)


「chap6.sqlite」の文字コードがEUC-JPでしたので、今回は「TkSQLite」を使用した方がいいと思います。(「SQLiteCC (SQLite Control Center)」は、UTF-8とSJISにのみ対応しています。)


1.「TkSQLite」を起動して、「ファイル」→「開く」で「chap6.sqlite」を選択します。


2.テーブル「book」をダブルクリックします。(※右の画面にbookテーブルの内容が表示されますが、文字化けしていると思います。)


3.「データベース」→「文字コード」→「euc-jp」を選択後、再度テーブル「book」をダブルクリックします。(※文字化けが直って正常に表示されます。)


4.テーブル「book」を右クリック→「テーブル作成のSQL文表示」を実行します。


5.SQLコマンドの入力欄に「CREATE TABLE book (isbn VARCHAR(25) PRIMARY KEY, title VARCHAR(100), price INT, published VARCHAR(20))」と表示されます。


6.そのまま「ファイル」→「開く」で、今度は自分で作成した空の状態の「chap06.sqlite」を選択して開きます。


7.SQLコマンドの欄に先ほどのテーブル作成のSQL文が入力されたままだと思いますので、そのまま「データベース」→「SQL実行」でSQLコマンドを実行します。


8.テーブル「book」をダブルクリックします。(※テーブルの構造が分かると思います。)


とりあえず、この状態の「chap06.sqlite」を使用して、createTables.phpを実行してみてください。(※createTables.phpの実行時には、レコードはあってもなくてもどちらでも大丈夫です。)


※レコードを追加する場合、(本に記述されていなければ)サンプルの「chap6.sqlite」を確認しながら入力しますので、「ファイル」→「最近開いたファイル」から選択して開くと、データベースファイルの切り替えが楽です。


基本的なSQL文が分からなければ、「SQLiteCC (SQLite Control Center)」を併用してみてください。(CREATE、UPDATEなどを選択するだけでSQL文のベースが入力欄に表示されますので、コピー&ペーストして使用すると便利です。SQLite2には対応していませんが、「PupSQLite」にもSQL文のベースを自動入力する機能があるので便利です。どちらもサイズが小さいので邪魔にはならないと思います。)


「PupSQLite」

http://www.eonet.ne.jp/~pup/

※ツールバーのSQLアイコンの横の▼をクリックするか、あるいはメニューの「機能」をクリック後に「SQL入力ウィンドウを開く」を実行すると起動しますので、SQLリストから選択後に「SQL文を挿入」を実行、SQL文の欄からコピー&ペーストして(「TkSQLite」のSQLコマンド欄に)使用してください。



【返信への回答追記4】


> chap06.sqliteは空ファイルなので、TKSQLiteではエラーが出ます。


すみません。TKSQLiteでは空ファイルを開く事はできませんね。

作成済みのテーブルを削除して、空のデータベースファイルで試していたので気がつきませんでした。

手順6で「ファイル」→「SQLite2DBを新規作成」で、「d:/Apache2.2/htdocs/samples/chap06/MyTest」にchap06.sqliteを新しく作成してください。(既存のchap06.sqliteは事前に削除して置きます。)

※その後の手順は同じです。

※「MyTest」フォルダに作成して欲しい理由は下に記述しています。(サンプルファイルをCD-ROM(?)からコピーし直してから実行してください。)



> 翔泳社の「独習PHP」という本です。


私が見つけたサンプルファイルはその本の物です。

著者が代表を務めるプロジェクトのWEBサイトでダウンロードできました。



> debug=0を無くしたら、御指摘の画面が出てきました。

> それと同時に、Address.phpも。Books.phpは出てきません。

> myConfig.iniのDataBaseをsamples.sqliteにしたら、samples.sqlite.iniはできました。


samples.sqliteを試したら、Address.phpは作成されたけれども、Book.phpは作成されなかったのですか?

samples.sqliteはどのように作成したのでしょうか?

addressとbookテーブルが存在するのでしたら、Address.phpとBook.phpが作成されますが、addressテーブルしかない場合は、(スキーマの他には)Address.phpしか作成されません。

samples.sqlite.iniの内容はどのようになっていますか?


私がダウンロードしたファイルには、samplesフォルダの中にsamples.sqliteがありますが、SQLiteバージョン3のデータベースファイルですから、DB_DataObjectでは扱えませんでした。(「SQLiteCC (SQLite Control Center)」で開くと、タイトルバーに表示されます。)

f:id:rouge_2008:20110916000305p:image

※chap6フォルダの中にchap6.sqliteがありますが、こちらの方で試した所、すべてのテーブルのクラスファイルが作成されました。


サンプルファイルは付録CD-ROMに収録されていたのでしょうか?

再度PCにコピーし直して、作業ディレクトリには必要なファイルだけをコピーして試した方が良いと思います。


1.「D:\Apache2.2\htdocs\samples\chap06」にMyTestフォルダを作成


2.「D:\Apache2.2\htdocs\samples\chap06\MyTest」に次の内容のMyConfig.iniを設置(chap06フォルダにあるサンプルファイルへの上書きを避けるため変更してあります。)

[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/MyTest/chap06.sqlite"
schema_location="D:\Apache2.2/htdocs/samples/chap06/MyTest"
class_location="D:\Apache2.2/htdocs/samples/chap06/MyTest"
require_prefix=DataObjects/
class_prefix=DataObjects_

※スキーマとクラスファイルは、MyTestフォルダに作成されます。


3.上記【返信への回答追記3】の手順1~8を実行します。(※手順6は新規作成に変更)


4.コマンドプロンプトで以下を実行します。

cd c:\php

php pear\DB\DataObject\createTables.php "D:\Apache2.2\htdocs\samples\chap06\MyTest\myConfig.ini"



※bookテーブルのみのchap06.sqliteで上手く動作したら、「samples\chap6」にあるはずのchap6.sqliteの方でも試してみてください。

id:inajyun

c:\phpで、php pear\DB\DataObject\createTables.php "D:\Apache2.2\htdocs\samples\chap06\myConfig.ini"を実行するとエラー無く実行できます。

ただ、実行後、pear.iniとBook.phpができるはずなのですが、できません。

どうかよろしくお願いいたします。

SQLite2のDBです。salite2→sqliteと変えました。


php.iniの「extension=php_sqlite.dll」を有効にしてありますか?

→有効にしてあります。

追記、

各ロケーションを探してみましたが、chap06.sqlite.iniもテーブル名.phpもできていません。

追記2

もう一度試してみて、pear.iniはC:\Windowsにできました。chap06.sqliteは空ファイルです。

追記3、インストールデフォルトですが、createTables.phpは以下のようです。

#!/usr/bin/php -q

// +----------------------------------------------------------------------+

// | PHP Version 4 |

// +----------------------------------------------------------------------+

// | Copyright (c) 1997-2003 The PHP Group |

// +----------------------------------------------------------------------+

// | This source file is subject to version 2.02 of the PHP license, |

// | that is bundled with this package in the file LICENSE, and is |

// | available at through the world-wide-web at |

// | http://www.php.net/license/2_02.txt. |

// | If you did not receive a copy of the PHP license and are unable to |

// | obtain it through the world-wide-web, please send a note to |

// | license@php.net so we can mail you a copy immediately. |

// +----------------------------------------------------------------------+

// | Author: Alan Knowles <alan@akbkhome.com>

// +----------------------------------------------------------------------+

//

// $Id: createTables.php 277015 2009-03-12 05:51:03Z alan_k $

//

// since this version doesnt use overload,

// and I assume anyone using custom generators should add this..

define('DB_DATAOBJECT_NO_OVERLOAD',1);

//require_once 'DB/DataObject/Generator.php';

require_once 'DB/DataObject/Generator.php';

if (!ini_get('register_argc_argv')) {

PEAR::raiseError("\nERROR: You must turn register_argc_argv On in you php.ini file for this to work\neg.\n\nregister_argc_argv = On\n\n", null, PEAR_ERROR_DIE);

exit;

}

if (!@$_SERVER['argv'][1]) {

PEAR::raiseError("\nERROR: createTable.php usage:\n\nC:\php\pear\DB\DataObjects\createTable.php example.ini\n\n", null, PEAR_ERROR_DIE);

exit;

}

$config = parse_ini_file($_SERVER['argv'][1], true);

foreach($config as $class=>$values) {

$options = &PEAR::getStaticProperty($class,'options');

$options = $values;

}


$options = &PEAR::getStaticProperty('DB_DataObject','options');

if (empty($options)) {

PEAR::raiseError("\nERROR: could not read ini file\n\n", null, PEAR_ERROR_DIE);

exit;

}

set_time_limit(0);

// use debug level from file if set..

DB_DataObject::debugLevel(isset($options['debug']) ? $options['debug'] : 1);

$generator = new DB_DataObject_Generator;

$generator->start();

追記です。

>空データベースを対象に実行した場合、以下のように表示されませんでしたか?

→表示されませんでした。

SQLiteのGUIツールを教えていただいたのですが、入るべき項目が恥ずかしながら分かりません。

>DB 1.7.14 stable

>DB_DataObject 1.9.6 stable

→同じです。

パスの設定誤りについては直して再度実行しましたが、駄目です。

どうかよろしくお願いいたします。

追記です。

debug=0を無くしたら、御指摘の画面が出てきました。

それと同時に、Address.phpも。Books.phpは出てきません。

本を読んでも御指摘を受けても全然分かりません。恥ずかしながら。

chap06.sqliteは空ファイルなので、TKSQLiteではエラーが出ます。

myConfig.iniのDataBaseをsamples.sqliteにしたら、samples.sqlite.iniはできました。とにかく、本の言っていることがさっぱり分かりません。翔泳社の「独習PHP」という本です。

2011/09/15 14:55:49

その他の回答2件)

id:Jupiter2100 No.1

回答回数444ベストアンサー獲得回数74

ポイント34pt

コマンドプロンプトを起動するとき、右クリックで「管理者として実行」を行い、管理者権限で起動してください。それから "go-pear.bat" を実行します。

id:inajyun

レスありがとうございます。

確かに管理者権限で実行したら、go-pearでかなりの部分がインストールできました。ただ、DataObjectのエラーは無くなりません。

2011/09/11 13:42:10
id:Jupiter2100 No.2

回答回数444ベストアンサー獲得回数74

ポイント33pt

PEAR::DB_DataObjectはインストールできていますか?


"myConfig.ini" は "pear\DB\DataObject\" に配置してください。

id:inajyun

レスありがとうございます。

DB_DataObjectはきちんとインストールされています。試しにアンインストールしてインストールしてその後、実行しましたが駄目でした。

myConfig.iniを指定の場所に配置しても、駄目です。

c:\php\php.exe c:\php\pear\DB\DataObject\createTables.php "c:\php\pear\DB\DataObject\myConfig.ini"を実行しても、

DB_DataObject Error :Connect Failed, turn on debugging to 5 see why

と出てきて終わってしまいます。

2011/09/11 19:22:19
id:rouge_2008 No.3

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント33pt

1. chap06.sqliteはSQLite2のデータベースですか?

明確な記述を見つける事はできませんでしたが、私の方で試した限りSQLite3には対応していないようです。



2. myConfig.iniの「database="sqlite2:~」を「database="sqlite:~」に修正してください。

※PEAR::DBで対応しているphptype(データベースバックエンド)に「sqlite2」はありません。

※「localhost」を省略して「database="sqlite:///~」のように書くこともできます。


[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"
schema_location="D:\Apache2.2/htdoc2/sample/chap06"
class_location="D:\Apache2.2/htdocs/samples/chap06"
require_prefix=DataObjects/
class_prefix=DataObjects_

http://pear.php.net/manual/ja/package.database.db.intro-dsn.php



3. php.iniの「extension=php_sqlite.dll」を有効にしてありますか?

「docs/DB/doc/STATUS」に「sqlite PHP 5: extension.」とあるように、PHP5はsqlite拡張を使用するようです。



※myConfig.iniの場所はどこでも大丈夫です。



【返信への回答追記】


myConfig.iniで「database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"」としているのでしたら、出来るファイルは「chap06.sqlite.ini」と「テーブル名.php」です。

chap06.sqliteにbookテーブルを作成済みなのでしょうか?

schema_locationに「chap06.sqlite.ini」が、class_locationに「テーブル名.php」が作成されているはずですので、myConfig.iniで各々に設定したディレクトリを確認してみてください。



【返信への回答追記2】


createTables.phpは、データベースを解析してデータベーススキーマとクラスファイルを作成するスクリプトのようです。

chap06.sqliteが空ファイルだと何も作成されません。

空データベースを対象に実行した場合、以下のように表示されませんでしたか?(「-- NO TABLES --」と出力されています。)


DB_DataObject_Generator   : 0       : CREATING FOR D:\Apache2.2\htdocs\samples\chap06\chap06.sqlite

DB_DataObject_Generator   : 0       : calling generateDefinitions
DB_DataObject_Generator   : 0       : Generating Definitions file:
DB_DataObject_Generator   : 0       : -- NO TABLES --

DB_DataObject_Generator   : 0       : calling generateForeignKeys
DB_DataObject_Generator   : 0       : calling generateClasses
DB_DataObject_Generator   : 0       : DONE


レコードが入っていなくても、テーブルがあれば次のように表示されます。


DB_DataObject_Generator   : 0       : CREATING FOR D:\Apache2.2\htdocs\samples\chap06\chap06.sqlite

DB_DataObject_Generator   : 0       : calling generateDefinitions
DB_DataObject_Generator   : 0       : Generating Definitions file:
DB_DataObject_Generator   : 0       : Writing ini as D:\Apache2.2\htdocs\samples\chap06/chap06.sqlite.ini

DB_DataObject_Generator   : 0       : calling generateForeignKeys
DB_DataObject_Generator   : 0       : calling generateClasses
DB_DataObject_Generator   : 0       : writing DataObjects_Diary

DB_DataObject_Generator   : 0       : DONE


chap06.sqliteにテーブルを作成して試してみてください。

※PHPで接続して作成してもいいですが、サンプルのデータベース作成等には、GUIツールを利用するのが簡単だと思います。


「SQLiteCC (SQLite Control Center)」

http://www.takke.jp/soft/sqliteccj.html


「TkSQLite」

http://reddog.s35.xrea.com/wiki/TkSQLite.html


※SQLite version2を扱えるソフトは、上記2つが便利そうでしたので、好みに合う方を使ってみてください。


※返信欄のcreateTables.phpの内容を比較してみましたが、こちらでインストールしたファイルと相違点はありませんでした。(「<php」の行が消えているのは、はてなの仕様だと思いますので)

コマンドで「pear list」で確認しましたが、該当するPEARパッケージのバージョンは以下の通りでした。


DB 1.7.14 stable

DB_DataObject 1.9.6 stable


※一つ気が付いたのですが、chap06.sqliteを置いたディレクトリが「d:/Apache2.2/htdocs/samples/chap06」なのに対して、スキーマ用のディレクトリが「D:\Apache2.2/htdoc2/sample/chap06」となっていました。(※私も最初の回答時点では気がつきませんでした・・・)

記述間違いがないか、myConfig.iniを再度確認してみてください。


[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/chap06.sqlite"
schema_location="D:\Apache2.2/htdocs/samples/chap06"
class_location="D:\Apache2.2/htdocs/samples/chap06"
require_prefix=DataObjects/
class_prefix=DataObjects_


※書き忘れましたが、「pear.ini」はPEARのインストール時に作成されるPEARの設定ファイルですので、今回のDB_DataObjectの操作とは関係ないはずです。



【返信への回答追記3】


>『空データベースを対象に実行した場合、以下のように表示されませんでしたか?』『 →表示されませんでした。』


MyConfig.iniに「debug=0」の行があるのでしたら、削除してから実行してみてください。


> SQLiteのGUIツールを教えていただいたのですが、入るべき項目が恥ずかしながら分かりません。


各ファイルが「~\samples\chap06」に入っているようですが、何かの本のサンプルではないですか?

その本を所持していないので、入るべき項目は私にも分かりませんし、何をやろうとしているのかも分かりません。

今回使用していると思われる本の場合は、検索してサンプル(オープンソース)を見つけることができましたので、サンプルデータベースやファイルの中身については(たぶん)分かりました。

ただし、何をどのような順番で実行しながら覚えていくのかまでは分かりませんので、本を読んで確認してください。


サンプルのデータベースは「chap6.sqlite」で、bookテーブルの他、全部で6つのテーブルがありました。

createTables.phpで自動作成したと思われるファイルは、「Book.php」の他「Address.php」「Musician.php」があり、全部で3つありました。(すべて「chap6.sqlite」にあるテーブルです。)

とりあえず、bookテーブルだけ作成して実行すれば良いのかどうか分かりませんが、詳細は本の該当箇所を順番に読み進めて確認してください。(※「createTable.phpの実行でBook.phpが作成される」というような記述があるのでしたら、その解説文の時点ではbookテーブルだけ作成した状態で実行すればいいのではないかと思います。読み進めながら本の指示や実行結果に従って、データベースファイルの内容を追加していく必要があるのだと思います。)


「chap6.sqlite」の文字コードがEUC-JPでしたので、今回は「TkSQLite」を使用した方がいいと思います。(「SQLiteCC (SQLite Control Center)」は、UTF-8とSJISにのみ対応しています。)


1.「TkSQLite」を起動して、「ファイル」→「開く」で「chap6.sqlite」を選択します。


2.テーブル「book」をダブルクリックします。(※右の画面にbookテーブルの内容が表示されますが、文字化けしていると思います。)


3.「データベース」→「文字コード」→「euc-jp」を選択後、再度テーブル「book」をダブルクリックします。(※文字化けが直って正常に表示されます。)


4.テーブル「book」を右クリック→「テーブル作成のSQL文表示」を実行します。


5.SQLコマンドの入力欄に「CREATE TABLE book (isbn VARCHAR(25) PRIMARY KEY, title VARCHAR(100), price INT, published VARCHAR(20))」と表示されます。


6.そのまま「ファイル」→「開く」で、今度は自分で作成した空の状態の「chap06.sqlite」を選択して開きます。


7.SQLコマンドの欄に先ほどのテーブル作成のSQL文が入力されたままだと思いますので、そのまま「データベース」→「SQL実行」でSQLコマンドを実行します。


8.テーブル「book」をダブルクリックします。(※テーブルの構造が分かると思います。)


とりあえず、この状態の「chap06.sqlite」を使用して、createTables.phpを実行してみてください。(※createTables.phpの実行時には、レコードはあってもなくてもどちらでも大丈夫です。)


※レコードを追加する場合、(本に記述されていなければ)サンプルの「chap6.sqlite」を確認しながら入力しますので、「ファイル」→「最近開いたファイル」から選択して開くと、データベースファイルの切り替えが楽です。


基本的なSQL文が分からなければ、「SQLiteCC (SQLite Control Center)」を併用してみてください。(CREATE、UPDATEなどを選択するだけでSQL文のベースが入力欄に表示されますので、コピー&ペーストして使用すると便利です。SQLite2には対応していませんが、「PupSQLite」にもSQL文のベースを自動入力する機能があるので便利です。どちらもサイズが小さいので邪魔にはならないと思います。)


「PupSQLite」

http://www.eonet.ne.jp/~pup/

※ツールバーのSQLアイコンの横の▼をクリックするか、あるいはメニューの「機能」をクリック後に「SQL入力ウィンドウを開く」を実行すると起動しますので、SQLリストから選択後に「SQL文を挿入」を実行、SQL文の欄からコピー&ペーストして(「TkSQLite」のSQLコマンド欄に)使用してください。



【返信への回答追記4】


> chap06.sqliteは空ファイルなので、TKSQLiteではエラーが出ます。


すみません。TKSQLiteでは空ファイルを開く事はできませんね。

作成済みのテーブルを削除して、空のデータベースファイルで試していたので気がつきませんでした。

手順6で「ファイル」→「SQLite2DBを新規作成」で、「d:/Apache2.2/htdocs/samples/chap06/MyTest」にchap06.sqliteを新しく作成してください。(既存のchap06.sqliteは事前に削除して置きます。)

※その後の手順は同じです。

※「MyTest」フォルダに作成して欲しい理由は下に記述しています。(サンプルファイルをCD-ROM(?)からコピーし直してから実行してください。)



> 翔泳社の「独習PHP」という本です。


私が見つけたサンプルファイルはその本の物です。

著者が代表を務めるプロジェクトのWEBサイトでダウンロードできました。



> debug=0を無くしたら、御指摘の画面が出てきました。

> それと同時に、Address.phpも。Books.phpは出てきません。

> myConfig.iniのDataBaseをsamples.sqliteにしたら、samples.sqlite.iniはできました。


samples.sqliteを試したら、Address.phpは作成されたけれども、Book.phpは作成されなかったのですか?

samples.sqliteはどのように作成したのでしょうか?

addressとbookテーブルが存在するのでしたら、Address.phpとBook.phpが作成されますが、addressテーブルしかない場合は、(スキーマの他には)Address.phpしか作成されません。

samples.sqlite.iniの内容はどのようになっていますか?


私がダウンロードしたファイルには、samplesフォルダの中にsamples.sqliteがありますが、SQLiteバージョン3のデータベースファイルですから、DB_DataObjectでは扱えませんでした。(「SQLiteCC (SQLite Control Center)」で開くと、タイトルバーに表示されます。)

f:id:rouge_2008:20110916000305p:image

※chap6フォルダの中にchap6.sqliteがありますが、こちらの方で試した所、すべてのテーブルのクラスファイルが作成されました。


サンプルファイルは付録CD-ROMに収録されていたのでしょうか?

再度PCにコピーし直して、作業ディレクトリには必要なファイルだけをコピーして試した方が良いと思います。


1.「D:\Apache2.2\htdocs\samples\chap06」にMyTestフォルダを作成


2.「D:\Apache2.2\htdocs\samples\chap06\MyTest」に次の内容のMyConfig.iniを設置(chap06フォルダにあるサンプルファイルへの上書きを避けるため変更してあります。)

[DB_DataObject]
database="sqlite:///d:/Apache2.2/htdocs/samples/chap06/MyTest/chap06.sqlite"
schema_location="D:\Apache2.2/htdocs/samples/chap06/MyTest"
class_location="D:\Apache2.2/htdocs/samples/chap06/MyTest"
require_prefix=DataObjects/
class_prefix=DataObjects_

※スキーマとクラスファイルは、MyTestフォルダに作成されます。


3.上記【返信への回答追記3】の手順1~8を実行します。(※手順6は新規作成に変更)


4.コマンドプロンプトで以下を実行します。

cd c:\php

php pear\DB\DataObject\createTables.php "D:\Apache2.2\htdocs\samples\chap06\MyTest\myConfig.ini"



※bookテーブルのみのchap06.sqliteで上手く動作したら、「samples\chap6」にあるはずのchap6.sqliteの方でも試してみてください。

id:inajyun

c:\phpで、php pear\DB\DataObject\createTables.php "D:\Apache2.2\htdocs\samples\chap06\myConfig.ini"を実行するとエラー無く実行できます。

ただ、実行後、pear.iniとBook.phpができるはずなのですが、できません。

どうかよろしくお願いいたします。

SQLite2のDBです。salite2→sqliteと変えました。


php.iniの「extension=php_sqlite.dll」を有効にしてありますか?

→有効にしてあります。

追記、

各ロケーションを探してみましたが、chap06.sqlite.iniもテーブル名.phpもできていません。

追記2

もう一度試してみて、pear.iniはC:\Windowsにできました。chap06.sqliteは空ファイルです。

追記3、インストールデフォルトですが、createTables.phpは以下のようです。

#!/usr/bin/php -q

// +----------------------------------------------------------------------+

// | PHP Version 4 |

// +----------------------------------------------------------------------+

// | Copyright (c) 1997-2003 The PHP Group |

// +----------------------------------------------------------------------+

// | This source file is subject to version 2.02 of the PHP license, |

// | that is bundled with this package in the file LICENSE, and is |

// | available at through the world-wide-web at |

// | http://www.php.net/license/2_02.txt. |

// | If you did not receive a copy of the PHP license and are unable to |

// | obtain it through the world-wide-web, please send a note to |

// | license@php.net so we can mail you a copy immediately. |

// +----------------------------------------------------------------------+

// | Author: Alan Knowles <alan@akbkhome.com>

// +----------------------------------------------------------------------+

//

// $Id: createTables.php 277015 2009-03-12 05:51:03Z alan_k $

//

// since this version doesnt use overload,

// and I assume anyone using custom generators should add this..

define('DB_DATAOBJECT_NO_OVERLOAD',1);

//require_once 'DB/DataObject/Generator.php';

require_once 'DB/DataObject/Generator.php';

if (!ini_get('register_argc_argv')) {

PEAR::raiseError("\nERROR: You must turn register_argc_argv On in you php.ini file for this to work\neg.\n\nregister_argc_argv = On\n\n", null, PEAR_ERROR_DIE);

exit;

}

if (!@$_SERVER['argv'][1]) {

PEAR::raiseError("\nERROR: createTable.php usage:\n\nC:\php\pear\DB\DataObjects\createTable.php example.ini\n\n", null, PEAR_ERROR_DIE);

exit;

}

$config = parse_ini_file($_SERVER['argv'][1], true);

foreach($config as $class=>$values) {

$options = &PEAR::getStaticProperty($class,'options');

$options = $values;

}


$options = &PEAR::getStaticProperty('DB_DataObject','options');

if (empty($options)) {

PEAR::raiseError("\nERROR: could not read ini file\n\n", null, PEAR_ERROR_DIE);

exit;

}

set_time_limit(0);

// use debug level from file if set..

DB_DataObject::debugLevel(isset($options['debug']) ? $options['debug'] : 1);

$generator = new DB_DataObject_Generator;

$generator->start();

追記です。

>空データベースを対象に実行した場合、以下のように表示されませんでしたか?

→表示されませんでした。

SQLiteのGUIツールを教えていただいたのですが、入るべき項目が恥ずかしながら分かりません。

>DB 1.7.14 stable

>DB_DataObject 1.9.6 stable

→同じです。

パスの設定誤りについては直して再度実行しましたが、駄目です。

どうかよろしくお願いいたします。

追記です。

debug=0を無くしたら、御指摘の画面が出てきました。

それと同時に、Address.phpも。Books.phpは出てきません。

本を読んでも御指摘を受けても全然分かりません。恥ずかしながら。

chap06.sqliteは空ファイルなので、TKSQLiteではエラーが出ます。

myConfig.iniのDataBaseをsamples.sqliteにしたら、samples.sqlite.iniはできました。とにかく、本の言っていることがさっぱり分かりません。翔泳社の「独習PHP」という本です。

2011/09/15 14:55:49
  • id:rouge_2008
    返信へのレスは、回答に追記させていただきました。
    確認お願いします。
  • id:rouge_2008
    再度回答に追記しましたので、確認をお願いします。
  • id:rouge_2008
    再度回答を編集して追記しました。
    確認お願いします。
  • id:rouge_2008
    再度回答を編集して【返信への回答追記4】以降を追記しました。
    確認お願いします。
  • id:inajyun
    rouge_2008さん、すいません。
    あなたに80ポイントあげようと思っていたのですが、自動終了であげることができませんでした。どうもご協力ありがとうございます。感謝です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません