2013-12-04 3 views
0

Приведенная ниже команда работает из командной строки. Как я могу выполнить это из php с помощью командной строки.Выполнить команду windows в командной строке с помощью php

"C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe"/Session:"session" 

Я пробовал, как показано ниже, но ни одна попытка не работает. Можете ли вы предложить правильный формат?

1)exec('C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe "'/Session:session'"'); 

2)system("C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe /Session:session",$status); 
+1

Ой, Windows ... это больно :( – Nemoden

+1

Посмотрите на ноты для Windows, http://php.net/manual/ru/function.exec.php#101579 или, гораздо лучшее решение, используйте Linux или Macintosh – Nemoden

+0

@Nemoden: извините, я не могу этого не делать. :( –

ответ

1

При попытке выполнить команду из приглашения я нашел несколько решений, но это зависит от версии используемых вами окон. Так я запускаю команды через php, которые, как я знаю, работают из командной строки. Вы должны включить расширение COM в php5.4 +. Я считаю, что самая сложная часть заключается в том, что вы всегда имеете правильное количество обратных косых черт. Обычно я выхожу из $ runCommand, чтобы проверить результат, прежде чем разочароваться в синтаксисе, который не совсем корректен.

// -- Windows command prompt action -- // 
$WshShell = new COM("WScript.Shell"); 
$data='C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe /Session:session'; 
$runCommand = "c:\\windows\\system32\\cmd.exe /C ".$data; 
$output = $WshShell->Run($runCommand, 0, false);  
// -- end Windows command prompt action -- // 
0

Вы могли бы хотеть смотреть на command library я написал специально для этого. (извините за бесстыдный паб)

Он гармонизирует различия ОС и пытается обмануть некоторые неприятные ошибки в окнах. Он также позволяет вам получать доступ к stdout, stdin и stderr даже при использовании exec под окнами.

Например, в вашем случае:

use Tivie\Command\Command; 

$cmd = new Command(\Tivie\Command\ESCAPE); 
$cmd->setCommand('C:\Program Files (x86)\DBConvert\SQLite2MySQLSync\SQLite2MySQLSync_Cons.exe') 
    ->addArgument(
     new Argument('/Session:"session"') 
    ); 
$result = $cmd->run(); 

Command::run() возвращает Result object, что вы можете получить доступ, чтобы получить результат команды.

echo $result->getStdOut(); // The Standard Output of the command 
echo $result->getLastLine(); // The last line of the Standard Output 
echo $result->getStdIn();  // The passed standard input 
echo $result->getStdErr(); // The standard error 
echo $result->getExitCode(); // The command's exit code 
Смежные вопросы