2016-08-02 2 views
0

내가 PHP를 사용하여 배치 파일을 실행하는 것을 시도했다 :이 작품의PHP 왜 배치 파일을 실행할 수 없습니까?

$script = "\\\MAFINFWWWPV02\D$\WebContent\\engsys.corp.ftr.com\BatchFiles\CopyFiles.bat"; 
exec($script,$ReturnArray,$ReturnValue); 
//shell_exec($script); 
//system('cmd /c $script'); 
//system($script,$ReturnValue); 

없음! 나는 시도하고 무슨 일이 일어나고 있는지 볼 수

var_dump($ReturnValue); echo "<br>"; 
var_dump($ReturnArray); echo "<br>"; 

을 시도했지만,이 같은 정상 출력으로 보이는 얻을 :

INT (1)

배열 (0) {}

하지만 수동으로 실행할 때 잘 작동하는 내 bat 파일로 복사하려는 파일은 복사되지 않습니다.

\ 필요를 수행

편집 추가 질문은 파일 주소를 이스케이프 할?

CopyFiles.bat NT AUTHORITY \ IUSR : (I) (RX)

  NT AUTHORITY\SYSTEM:(I)(F) 

     NT AUTHORITY\NETWORK:(I)(RX) 

     CORP\ibb601:(I)(F) 

     CORP\taw330:(I)(F) 

     CORP\mmm976:(I)(F) 

     BUILTIN\Administrators:(I)(F) 

     BUILTIN\Users:(I)(RX,W) 

내가 여기에 편집이

내가 icacls 실행에서 무엇을 얻을 모든 권한을 갖고 있고 다른 모든 사람들은 적어도 읽기/실행을해야합니다.

내가 그것을 좁혀 3

편집 할 수 있습니다. 명령이 작동하지 않는 것은 아닙니다. 권한이 파일에 대해 거부되었습니다. 나는 모든 사람이 전체 폴더에 대한 쓰기 및 읽기/실행 권한을 갖고 있기 때문에 이해하지 못합니다.

편집하는 것은 4

나는 그것이 작동려고 위의 명령을 실행하고 있습니다. 내 화면에 오류가 무엇인지 인쇄하려면 함수 (var_export(my_exec("shell_exec($script)"));)를 사용하고 있습니다. 나는 이런 식으로 계속하고있다 :

'\'shell_exec \ '은 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않는다.

나는 각 shell_exec, systemexec에 대해 다른 하나를 얻을. 명령이 인식되지 않는다고 계속 말하고 있습니다. 이것은 Windows Server 2012 R2 Standard 64 비트에서 실행됩니다. 명령에 내가 잘못하고있는 것이 있습니까? 나는 (내가 다른 게시물에 그것을 발견) 오류를 인쇄하기 위해 사용하고

기능 : 당신은 때 작은 따옴표 안에 \을 탈출 할 필요가 없습니다

function my_exec($cmd, $input='') 
    { 
     $proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>array('pipe', 'w')), $pipes); 
     fwrite($pipes[0], $input);fclose($pipes[0]); 
     $stdout=stream_get_contents($pipes[1]);fclose($pipes[1]); 
     $stderr=stream_get_contents($pipes[2]);fclose($pipes[2]); 
     $rtn=proc_close($proc); 
     return array('stdout'=>$stdout,'stderr'=>$stderr,'return'=>$rtn); 
    } 
+0

웹 서비스가 아마 서버, 위치 또는 박쥐 파일에 액세스 및/또는 아무튼 권한이없는 실행하는 사용자를 \ B 형 \에 c \ 복사 할 파일이나 대상에 액세스 할 수있는 권한이 없습니다. – AbraCadaver

+0

@AbraCadaver 사용자가 파일 위치와 .bat 파일 위치 모두에 대한 읽기/쓰기 액세스 권한을 가지고 있는지 확인했습니다. – Mike

+0

@AbraCadaver 정확히 어떤 사용자가 사용되고 있는지 확인하는 방법이 있습니까? 또는 특정 사용자를 사용하도록 강제 할 수 있습니까? – Mike

답변

0

를 보라. 여기에 내가 함께 결국 무엇을 :

$script = chr(92) . chr(92) . 'MAFINFWWWPV02\D$\WebContent\engsys.corp.ftr.com\BatchFiles\CopyFiles.bat'; 
if (!file_exists($script)) 
{ 
    var_dump($script); echo " Script<br>"; 
    echo "Script doesn't exist!<br>"; 
    var_dump(!file_exists($script)); 
} 
else 
{ 
    system('cmd /c ' . $script); echo " <br>"; 
} 

때때로 나는 여전히 Script doesn't exist! 메시지가,하지만 난 # 1 서버가 아닌 # 2 서버에 연결되어있을 때이 보통이다. .nat 형식은 다음과 같습니다.

echo off 
SET source2="\\MAFINFWWWPV02\engsys.corp.ftr.com" 

START /wait NET USE L: "\\MAFINFWWWPV01\engsys.corp.ftr.com" Password /user:UserName 

xcopy %source2% L: /E /Y /Q 

NET USE L: /DELETE 
0

.

스크립트를 실행하려면, 확인은 확실하다 존재하고 실행 가능한 : 스크립트가 웹 서버를 통해 실행

$script = '\\MAFINFWWWPV02\engsys.corp.ftr.com\CopyFiles.bat'; 

if (!file_exists($script) || !is_executable($script)) { 
    // Im' sorry dave 
} 

// carry on... 

경우 서비스를 실행하는 사용자가 자신없는 권리를 실행이 있는지 확인 사용자! is_executable은 파일을 실행하는 사용자가 실행 파일인지 여부 만 확인합니다.

반환 코드가 1이므로 일부 권한 문제가있을 수 있습니다.

참고 : 안전 모드가 활성화되면, 당신은 safe_mode_exec_dir 안의 파일을 실행할 수있는 성공적인 실행은 또한 문서에서 다음 메모를 고려 코드를 0

를 반환있다. 실용적인 이유로 현재 실행 파일의 경로에 구성 요소가있는 것은 허용되지 않습니다.

exernal 실행중인 프로세스의 OS 불가지론 방법을 가지고, 나는 마지막으로 작동 할 수있어 Symfony Process component

+0

모든 사용자에게 읽기/실행 권한이 있습니다. 한 번에 한 번만 검사를 시도하여 문제가 무엇인지 확인했습니다. 문제는'! is_executable ($ script) '이라는 것이 밝혀졌습니다. 그러나 모든 사람이 실행 권한을 갖고 있다면 문제가 무엇입니까? – Mike

-1

당신은

c:\\a\\b\\c 

대신 C 시도해야합니다 :

관련 문제