web-dev-qa-db-ja.com

PHPでWindowsコマンドを実行する

PHPからWindowsコマンドラインコードを実行することは可能ですか?私のWindowsコマンドラインコードは次のとおりです。

_<?php 
error_reporting(E_ALL); 
try {

echo exec('C:\xampp\mysql\bin>mysqlbinlog --start-datetime="2011-04-21 10:31:44" c:\xampp\mysql\data\binlog\bin-log.000001 > c:\xampp\mysql\data\binlog\sql.txt');

} catch (Exception $e) {
echo $e->getMessage();
}
_

ここで、このコードをPHP system()またはexec()などを使用して実行したいと思います。

8
Shawon

コマンドラインから手動でコマンドを実行できるが、WAMPを介して実行できない場合は、Apacheサービスを実行するユーザーよりも、コマンドとバイナリを実行するために必要な権限がありません(GUIの場合はデスクトップと対話することもできません)。関連)。

デフォルトでは、Apacheサービスはユーザーアカウントで実行されます:nt Authority\system

以下の手順に従って、カスタムユーザー(管理者権限を持つユーザー)に変更します。

  1. Windows + Rを押すとRunが開きます
  2. 「services.msc」と入力すると、Windowsサービスのリストが開きます。
  3. Apacheサービスを見つけて選択し、そのプロパティを開きます
  4. [ログオン]タブに移動し、アカウントを「ローカルシステム」から別のユーザー/アカウントに変更します
  5. Apacheサービスを再起動します

ハッピーコーディング:-)

11
Loki

私はwampを使用していますが、唯一の解決策は次のとおりです。

コントロールパネル/管理ツール/サービスで、wampapache64、httpd、またはそのようなものを検索します。 [ログオン]タブで、[サービスがデスクトップと対話できるようにする]にチェックマークを付けます

お役に立てれば!

6
asmcod

Exec()でコマンドを直接実行できない場合は、コマンドを使用してバッチファイルを作成し、それをWebサイトのルートに配置することができます。次に、実行するだけです。

<?php echo exec("script.bat"); ?>
2
Ermir

C:\xampp\mysql\bin>mysqlbinlogはコマンドではありません。

C:\xampp\mysql\bin\mysqlbinlogという意味だと思います。

>\が置き換えられていることに注意してください。

>は、コマンドプロンプトで(目のための)区切り文字としてのみ表示されますが、出力をリダイレクトしようとしない限り、コマンドでそのように使用しないでください。 (これは、後の行で再度実行します)。したがって、最初の>\に置き換えるだけで、コマンドが実行されます。

0
Rik