• 締切済み

PHPでレジストリの値を取得する

Windows XPです。 PHPでアプリケーション(MySQL)のインストール先を調べるために レジストリの値を取得したいのですが、どうすればよいのでしょうか? また、レジストリのキー名の一部しか分からない場合検索などはできますでしょうか? よろしくお願いいたします。

みんなの回答

回答No.4

PHPからexecコマンドを叩いてmysqlのダンプデータをリストアするということですと、結局ユーザ側はインストーラにmysqlのID/Passを教える必要があり、データベースもどれを使うかを選択する必要があるのだと思います。 (ついでに、レンタルサーバなどではデータベースは一つしかもらえない) また、exec、system、shell_exec関数などが制限されている場合にまったく使用できないということも考えられます。 はなからmysqlを使用するアプリケーションなのであれば、ダンプファイルにCREATE DATABASEを含んでいないのが前提であれば、PHPからmysql_queryなり、PDOなりでSQLクエリを叩いたほうが良い気がしますがいかがでしょうか。 必要なSQLクエリが記述されているテキストファイルを読み込んで、「;」でsplitするなりして、順番にSQLを叩いていくという流れのほうがスマートで、OSに依存しない気がしますが、どうでしょうか。

回答No.3

とりあえず入ってそうなパスをリストしておいて総当り。とか。 phpからレジストリいじる方法は知らないけどWinプログラムやvbs等に処理を渡して標準出力から受けるとかってどうでしょう。

52966925
質問者

お礼

総当りするならパスを入力してもらった方がよさそうですね。 Winプログラムでしたら、コマンドプロンプトでレジストリの値が参照できる様な気がするのですがやり方がよく分かりません。お手数おかけして申し訳ありませんが、教えていただけると助かります。

回答No.2

『どの環境でも汎用的に使える』インストーラを 作成しようとしているってことですね! MySQLはバージョンの異なるものを別のサービスとして 稼動させることができますが、この場合には529666925さんの 実現しようとしているディレクトリの自動取得では 想定していない動作をしてしまうのではないでしょうか? PHPアプリケーションのインストール時に MySQLディレクトリへのパスを入力してもらうセクションを設け、 内部的にはXMLやiniファイルで管理しその値を読み込む、 といった仕様のほうが無難なように思えます。 別の案としては『使用するMySQLのディレクトリに パスが通っていることを前提条件とする。』 などというのはいかがでしょう? 自分も、こういったインストールの仕組みなどなど 考えるのが好きなので、他に想定していることがあれば 追加で投稿してもらえると嬉しいです!!

52966925
質問者

お礼

>『どの環境でも汎用的に使える』インストーラ そうです!LinuxとWindowsで使えるインストーラを作ろうとしています。 バージョンの異なるものが入っていた場合、パスが正しく取得できない以外の想定していない動作とはどういったものがあるのでしょうか? MySQLディレクトリのパスを入力してもらい、iniファイルで持つということも考えたのですが、他にも入力項目があるので項目をなるべく少なくする事と入力ミスが起こる事を考慮して、レジストリを取得するという方法を考えました。 よく分からないのですが、exec関数などでレジストリの値を取得できるように感じました。

回答No.1

はじめまして。 以前に投稿されていた【ディレクトリの分からないファイルの存在チェック】の時にも ご返答しようかと思っておりました。 質問の内容に答える前にお伺いしたいのですが、 MySQLのインストール先パスは何のために必要となるのでしょうか? なんというか、52966925さんの実現しようとしていることが 通例、全く別のアプローチをとるものであるような気がするので…^^; 一度ご質問の技術を必要とする背景などを 教えていただけると回答もつきやすいと思います!

52966925
質問者

お礼

ちなみに「dir /s /b mysql.exe」で検索するという方法も取ってみたのですが、検索に時間がかかりすぎるので、時間の短くすむ検索方法をさがしています。

52966925
質問者

補足

アドバイスありがとうございます。 PHPプログラムのインストーラを作成しておりまして、 その中でデータベースをdumpファイルから作成する部分があります。 作成はexec関数のmysqlコマンドで行っており、その際にMySQLのインストール先パスが必要となります。 説明がアバウトすぎますでしょうか?よろしくお願いいたします。

関連するQ&A