2013-10-09 2 views
0
을 매개 변수를 사용하여 명령 줄을 실행하고 사용할

내 설정 : 서버 2008 R2 7.5 은 PHP 내가 페이지 중 하나에 PHP 스크립트를 찾고 있어요 5PHP 웹 페이지가 출력

명령 줄을 실행하는 IIS 웹 페이지가 그 때의 산출을 이용할 수있는 매개 변수를 가진 exe.

비디오를 변환하고 명령이 실행 된 위치에 저장하는 명령 줄 프로그램이 있는데, 나는 웹 페이지에서이를 수행 한 다음 웹 페이지에서 변환 된 파일을 가져올 수있게하고 싶습니다. 시청하기 위해 임베디드 플레이어에 넣으시겠습니까 ??

이 가능하다조차 :

+2

** 지금까지 노력이 무엇 ** –

+0

https://www.google.com/search?q=I 'm + 찾고 + to + have + a + PHP + script + on + one + of + 페이지 + 그 + 실행 + a + 명령 + line + exe + + 매개 변수 + that + the + 웹 페이지 + can + then & oq = 내가 사용하는 + 출력 + 사용 + + + + PHP + 스크립트 + on + one + of + the + 페이지 + that + 실행 + a + command + line + exe + with + 매개 변수 + 그 + 웹 페이지 + 수 + 사용 + + 출력 +. & aqs = chrome..69i57.1766j0j8 & sourceid = chrome & espvd =210 & es_sm = 93 & ie = UTF-8 – Sebas

+0

[ ternal 프로그램 데이터] (http://stackoverflow.com/questions/2778122/php-retrieve-external-program-data) – aynber

답변

0

CRACKED IT !! 도움을

감사하지만, 그것이 작동 :)

는 내가 다시 내 명령에 틱. PHP는 웹 페이지를 통과 명령 행 도구를 사용하여 얻을 수 있었다. 프로그램이 주어진 url (양식의 POST에서 가져온 변수)에서 비디오를 다운로드하고 다운로드 한 비디오를 플래쉬 폴백 (fallback) 기능이있는 임베디드 HTLM 5 비디오 요소에 넣습니다.

특정 브라우저에서는 mp4를, 다른 브라우저에서는 webm을 가져 오는 구문을 작성하여 태그를 지원하지 않는 구형 브라우저의 경우 플래시를 사용하여 항상 작동해야합니다.

는 잘 작동 :)

코드 참조 : -

<?php 
$input = $_POST['url']; 
function browser_info($agent=null) { 
    $known = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 
    'konqueror', 'gecko'); 
    $agent = strtolower($agent ? $agent : $_SERVER['HTTP_USER_AGENT']); 
    $pattern = '#(?<browser>' . join('|', $known) . 
    ')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#'; 
    if (!preg_match_all($pattern, $agent, $matches)) return array(); 
    $i = count($matches['browser'])-1; 
    return array($matches['browser'][$i] => $matches['version'][$i]); 
}; 
$ua = browser_info(); 

if($ua['firefox']): 
$filename = `C:\Windows\dl.exe -e -f 45/44/43/35/34/5 $input`; 
$download = `C:\Windows\dl.exe -o "%(title)s.%(ext)s" -f 45/44/43/35/34/5 $input`; 
$output = `C:\Windows\dl.exe -g -f 45/44/43/35/34/5 $input`; 

else: 
$filename = `C:\Windows\dl.exe -e -f 22/18/35/34/5 $input`; 
$download = `C:\Windows\dl.exe -o "%(title)s.%(ext)s" -f 22/18/35/34/5 $input`; 
$output = `C:\Windows\dl.exe -g -f 22/18/35/34/5 $input`; 

endif; 
?> 
<html> 
<head> 
<script type="text/javascript"> 
window.onunload=function(){ 
window.open('/watch/close.php', '_blank', ''); 
window.close(); 
}; 
</script> 
<link rel="stylesheet" href="../css/navigation.css" type="text/css" media="screen" /> 
<link rel="stylesheet" href="index.css" type="text/css" media="screen" /> 
</head> 
<body> 
<ul class="t1"> 
<li class="t2"><a href="/">Home</a></li> 
<li class="t2 t3"><a href="../Video">Videos</a></li> 
<li class="t2 t4"><a href="/Downloads">Downloads</a></li> 
<li class="t2 t8"><a href="/web">Proxy</a></li> 
<li class="t2 t5"><a href="../Forsale">For Sale</a></li> 
<li class="t2 t6"><a href="/owa">E-mail</a></li> 
<li class="t2 t7"><a href="/CV">My CV</a></li> 
</ul> 
<br /> 
<div class="white"> 
<video controls id="vid" width="800" height="450" autoplay="autoplay" preload="none" poster="../Images/loading.jpg"> 
<source src="<?php echo $filename; ?>.mp4"> 
<source src="<?php echo $filename; ?>.webm" type="video/webm; codecs=&quot;vp8, vorbis&quot;"> 
<object> 
<embed 
src="player.swf" 
width="640" height="360" 
bgcolor="000000" 
allowscriptaccess="always" 
allowfullscreen="true" 
type="application/x-shockwave-flash" 
flashvars="width=640&height=360&type=video&fullscreen=true&volume=100&autostart=true&file='<?php echo $filename; ?>.flv'" 
/> 
</object> 
</video> 
</div> 
<div class="white"> 
<a onmouseover="self.status='Downloadable file'; return true" onmouseout="self.status=''" onclick="alert('Please right click and use \'Save Target/Link As\'.'); return false" href="<?php echo $output; ?>">Download this video</a> 
</div> 
</body> 
</html> 
0

당신이 찾고있는이 기능은 exec()이다 -s.

명령에 사용하기 전에 매개 변수를 탈출해야합니다 : escapeshellarg()

$param = $_POST["param"]; 
// some sort of sanitizing happens here 
... 

다음 명령

$output = exec("videoconverter ".escapeshellarg($param)); 
+0

PHP로'exec'을 사용하는 것에주의하십시오. 잘못 사용하면 해로울 수 있습니다. 또한 공유 호스트 (프로젝트를 호스트하는 경우)는 PHP에서 exec, system 및 shell 명령을 완전히 비활성화하여 자원을 막거나 남용을 방지 할 수 있습니다. –

+1

잘못 사용하면 유해 할 수없는 것은 무엇입니까? –

+0

사실 콘돔조차도 해로울 수 있습니다. –

0

그것은 PHP 가능합니다. 그러나 Phyton, Ruby, C++ 또는 C#과 같은 프로그래밍 언어는 배경 작업을보다 잘 처리 할 수 ​​있습니다.

exec, system, shell_exec, popen 같은 것을 사용해야 할 것 PHP에서 백그라운드 작업을 수행 할 이상의 무언가가 fsockopenpcntl_fork 같은 고급.

모두 스택에 따라 다릅니다. 어떤 설정이 필요한 Gearman과 같은 작업 서버가 있지만 이러한 서버에서 처리가 처리 될 때 PHP로 작업하는 것이 더 쉬워집니다.

당신이 무엇을 달성하고자하는 접근 방법 :

  1. 은 CLI

  2. 에서 실행 가능하도록 변환하여 비디오

  3. chmod를 755으로 파일을 저장하는 PHP 스크립트 만들기

  4. 동영상을 변환해야하는 즉시 백그라운드에서 스크립트를 실행하십시오.

pclose(popen('start "Process" /B "C:\PHP\php-cgi.exe" -f video_converter.php 2>&1 &', 'r'));

"Process"은 배경 cli 프롬프트의 제목입니다. 문제를 예방하는 데 필요합니다. /B 프롬프트 창없이 명령을 시작합니다. 스크립트의 출력은 중단을 방지하기 위해 2>&1 &으로 제한됩니다.

그러나 스크립트를 (예 : file_put_contents) 변환기 진행률을 파일에 기록하고 플레이어가있는 웹 사이트에서 ajax (javascript/jquery)를 수신하도록 허용했습니다. 100 %에 도달하자마자 비디오 파일 경로가 반환되고 자바 스크립트가 포함 된 플레이어를 업데이트하고 시작합니다.

변환이 오래 걸릴 수있는 큰 비디오 파일의 경우,이 응용 프로그램을 대중에게 공개 할 수 있도록하기 위해 비디오 시청 준비가 완료되면 즉시 전자 메일을 보낼 수 있습니다.

참고 : 명령은 Windows 서버에만 적용됩니다. * NIX, 리눅스, 썬과 같은 비 Windows OS는 다음 명령이 사용됩니다

shell_exec(sprintf('nohup /usr/bin/env php -q -f %s > /dev/null 2>&1 & echo $!', 'path/to/video_converter.php')); 

nohup이 더 끊기없고이 종료 될 때까지 백그라운드 프로세스 실행을 유지합니다. 나머지는 windows 명령과 거의 같습니다. 조금 수정되었습니다.

그것을 시도를 부여하고 여기에

:-) 일 경우 우리가 어떤 자원이 주제에 대한 자세한 정보와 읽을 가치가 알려 :