コマンドプロンプトからmysqldumpのコマンドをたたいたり、バッチとして動かしたりすると、普通にdumpしてくれるのですが、webベースで見たphpのプログラムの中で、system関数を使用して同じdump命令を出すと、コマンドとして認識をしてくれません。
これと別のマシンでは上記ができていて、
http://localhost/〜〜.php
でブラウザに表示させたPHPファイルからmysqldumpを呼び出してdumpがとれていますので、設定の問題だと思っているのですが、どこか気をつけるべき設定などありますでしょうか。
http://www.hatena.ne.jp/1122501314##
人力検索はてな - windowsサーバーで、mySQLとPHPを使っています。 コマンドプロンプトからmysqldumpのコマンドをたたいたり、バッチとして動かしたりすると、普通にdumpしてくれるのですが..
ぱっと思い付くのは、
・セキュリティ上の観点から、system関数の使用が制限されている。
・mysqladmin へのパスが通っていない。
あたりでしょうか。
まず、問題のマシンで mysqldump 以外のコマンド( date /t など)を php から
system関数で実行出来るかどうか確認してみては?
蛇足ですが、php から MySQL を管理するなら phpmyadmin が便利です。
http://jp.php.net/manual/ja/ref.exec.php#49383
PHP: プログラム実行関数 - Manual
なるほど。
上記 URL はsystem() では無く exec() のケースですが、
IIS を実行しているユーザーに cmd.exe の読み取り/実行権を与えることで
解決した例が報告されています。
ご参考になれば。
ご回答ありがとうございます!
明日早速試してみます。
------------------------
試してみたところ、cmd.exeに権限を与えることで解決しました!
ありがとうございました。
ご回答ありがとうございます。
セキュリティのことですが、phpinfoで確認したところ、safe_modeはちゃんとOFFになっていたのです。他にどこか、systemを制限するような設定がありましたでしょうか。
また、mysqldump固有の問題でないこともわかりました。元々、フルパスで指定しても失敗していたのでパスの問題ではなさそうだなと思っていたのですが、他のコマンド(dirとか)でも失敗してしまっていました。
system関数が制限されているのが問題のようです。(でもsafe_modeではないどこかで・・・)
あと、phpmyadminは使用しています。便利ですよね。
上記のmysqldumpは、dbのテーブルに一括インストールを行う前後にバックアップを自動的にとって、エラーの場合リカバリーするという一連の処理で使っていますので、phpmyadminでは代用できないのです。。。(あ、もしかして、スクリプトの中を覗いてロジックを参考にしろという意味でしたでしょうか?)