2014-10-07 8 views
0

저는 PHP (IIS/Windows)에서 sqlcmd를 호출 할 때이 문제를 해결하기 위해 머리를 터뜨 렸습니다. 그러나 왜 작동하지 않는지에 대한 완전한 손실을 느낍니다.PHP를 사용하여 sqlcmd를 호출하십시오.

코드 :

$sql = 'sqlcmd -S '.$serverName.' -d '.$databasename.' -U '.$userName.' -P '.$userPassword.' -q "exec GenerateInstallScript 123456890" -o C:\temp\sqlscripts.sql'; 
    shell_exec($sql); 

코드 실행 아무것도하지만은

C에서 생성됩니다 : \ 온도를

폴더에 있습니다. 시작/실행에서 수동으로 실행 해 보았지만 문제없이 실행됩니다. 심지어는 exec($sql)을 시도해도 sqlcmd의 전체 절대 경로를 사용하고 cmd.exe를 호출 한 다음 sqlcmd를 호출했지만 아직까지는 아무 것도 시도하지 않았습니다.

IUSR 전체 및 사용자에게 폴더에 대한 전체 권한을 추가하여 IIS의 사용 권한이 아니라 여전히 사용 권한이 아닌지 확인했습니다.

또한 proc mon을 사용하면 그 내용이 무엇인지 알 수 있고 sqlcmd, cmd 또는 php.exe와 관련이없는 것을 볼 수 있습니다 (그 이유는 나를 보여줍니다. 통화 항목).

나는 PHP와 SQLCMD에 대해 많은 양의 검색을 해왔지만 대부분의 사람들이 sqlcmd를 사용하여 배치 파일을 호출하는 것처럼 보입니다. 나는 여기에서 그것을 실제로 할 수 없기 때문에 어떤 지침도 인정 될 것이다!

+0

'shell_exec' 함수에서'sqlcmd'의 절대 경로/전체 경로를 사용해 보셨습니까? – Latheesan

+0

$ sql = 'C : \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ SQLCMD.EXE -S'. $ serverName. ' -d '. $ databasename.' -U '. $ userName.' -P '. $ userPassword.' -q "exec GenerateInstallScript 123456890"-o C : \ temp \ sqlscripts.sql '; shell_exec ($ sql);
위 출력을 실행하지 않았습니다. 나는 \\과 아직 아무것도 사용하지 않으려 고 노력했다. 감사! – jmc1919

+0

$ sql에 무엇이 들어 있는지 확인하려고 했습니까? shell_exec에서와 같이 명령 행에서 작동하는 명령을 시도 했습니까? – OIS

답변

0

여기에 가능한 생각이다, 이런 식으로 당신을 위해 수행 된 작업하도록 배치 스크립트를 사용

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'; 

?> 
+0

코드를 수정하고 웹 디렉토리의 루트에 .bat 파일을 추가하면 sqlscripts.sql 파일이 생성되지 않았습니다. 권한이 가능합니까? 지금까지 도움을 주셔서 감사합니다! – jmc1919