Я ломал голову над этим, пытаясь вызвать sqlcmd в PHP (IIS / Windows), но совершенно не понимаю, почему он не работает.
Код:
$sql = 'sqlcmd -S '.$serverName.' -d '.$databasename.' -U '.$userName.' -P '.$userPassword.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql';
shell_exec($sql);
Код выполняется, но ничего не генерируется в
C: \ Temp
папка. Я попытался запустить его вручную из запуска / запуска, и он работает без каких-либо проблем. Я даже попробовал просто exec($sql)
, используя полный абсолютный путь к sqlcmd, попытался вызвать cmd.exe, а затем sqlcmd, но пока ничего.
Я добавил IUSR full и Users полное разрешение для папки, а также, чтобы убедиться, что это не разрешения от IIS, но все еще ничего.
Я также использовал proc mon, чтобы посмотреть, скажет ли это мне что-нибудь, и я не вижу ничего, связанного с sqlcmd, cmd или php.exe (это привело бы меня к причине, почему — появляются записи, а не только стандартные записи вызовов).
Я провел большой поиск по PHP и по вызову SQLCMD, но кажется, что большинство людей вызывает пакетный файл с sqlcmd. Я не могу сделать это здесь, поэтому любые рекомендации будут оценены!
Вот возможная идея, используйте пакетный скрипт, чтобы сделать работу за вас следующим образом:
sqlcmd.bat
@ECHO OFF
cd /D "C:\Program Files\Microsoft SQL Server\100\Tools\Bin\"sqlcmd -S %1 -d %2 -U %3 -P %4 -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql
Затем вызовите этот пакетный скрипт, используя php:
test.php
<?php
$serverName = 'xyz';
$databasename = 'xyz';
$userName = 'xyz';
$userPassword = 'xyz';
shell_exec("sqlcmd.bat $serverName $databasename $userName $userPassword");
echo 'Done';
?>
Других решений пока нет …