windowsサーバーで、mySQLとPHPを使っています。

コマンドプロンプトからmysqldumpのコマンドをたたいたり、バッチとして動かしたりすると、普通にdumpしてくれるのですが、webベースで見たphpのプログラムの中で、system関数を使用して同じdump命令を出すと、コマンドとして認識をしてくれません。
これと別のマシンでは上記ができていて、
http://localhost/〜〜.php
でブラウザに表示させたPHPファイルからmysqldumpを呼び出してdumpがとれていますので、設定の問題だと思っているのですが、どこか気をつけるべき設定などありますでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/07/28 06:55:14
  • 終了:--

回答(2件)

id:thrillseeker No.1

thrillseeker回答回数328ベストアンサー獲得回数372005/07/28 22:50:34

ポイント100pt

http://www.hatena.ne.jp/1122501314##

人力検索はてな - windowsサーバーで、mySQLとPHPを使っています。 コマンドプロンプトからmysqldumpのコマンドをたたいたり、バッチとして動かしたりすると、普通にdumpしてくれるのですが..

ぱっと思い付くのは、

・セキュリティ上の観点から、system関数の使用が制限されている。

・mysqladmin へのパスが通っていない。

あたりでしょうか。

まず、問題のマシンで mysqldump 以外のコマンド( date /t など)を php から

system関数で実行出来るかどうか確認してみては?

蛇足ですが、php から MySQL を管理するなら phpmyadmin が便利です。

id:golbeza

ご回答ありがとうございます。

セキュリティのことですが、phpinfoで確認したところ、safe_modeはちゃんとOFFになっていたのです。他にどこか、systemを制限するような設定がありましたでしょうか。

また、mysqldump固有の問題でないこともわかりました。元々、フルパスで指定しても失敗していたのでパスの問題ではなさそうだなと思っていたのですが、他のコマンド(dirとか)でも失敗してしまっていました。

system関数が制限されているのが問題のようです。(でもsafe_modeではないどこかで・・・)

あと、phpmyadminは使用しています。便利ですよね。

上記のmysqldumpは、dbのテーブルに一括インストールを行う前後にバックアップを自動的にとって、エラーの場合リカバリーするという一連の処理で使っていますので、phpmyadminでは代用できないのです。。。(あ、もしかして、スクリプトの中を覗いてロジックを参考にしろという意味でしたでしょうか?)

2005/07/28 23:08:22
id:thrillseeker No.2

thrillseeker回答回数328ベストアンサー獲得回数372005/07/28 23:39:08

ポイント100pt

http://jp.php.net/manual/ja/ref.exec.php#49383

PHP: プログラム実行関数 - Manual

なるほど。

上記 URL はsystem() では無く exec() のケースですが、

IIS を実行しているユーザーに cmd.exe の読み取り/実行権を与えることで

解決した例が報告されています。

ご参考になれば。

id:golbeza

ご回答ありがとうございます!

明日早速試してみます。

------------------------

試してみたところ、cmd.exeに権限を与えることで解決しました!

ありがとうございました。

2005/07/29 17:02:29
  • id:thrillseeker
    こんな対策も

    回答者です。たくさんのポイントありがとうございました。
    cmd.exe の権限変更以外にも、cmd.exe を PHP フォルダ (C:?PHP 等)
    にコピーすることでもOKなようです。
    http://jp.php.net/manual/ja/function.system.php#52195

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません