나는 끝내기 위해 15 분이 걸리는 서버 A에서 실행되는 PHP 스크립트를 가지고있다. 나는 웹 브라우저를 통해 스크립트를 실행하고 블록으로 출력을 브라우저로 보냅니다 (일부 PHP 명령이 완료됨에 따라). 블록의 예는 아래를 참조하십시오. 스크립트는 DB2 데이터베이스를 작성하며 합계가 거의 필요하지 않습니다.아나운서를 통해 PHP 스크립트에서 sinatra 다시 스트림 출력 수 있습니까?
이제 AJAX를 통해 서버 B의 sinatra에서 동일한 스크립트를 실행합니다. 그것은 잘 작동하지만 일단 PHP 스크립트가 완료되면 출력 (전체 블록 내가 그것을 부르는) 전체를 많이 얻을.
sinatra/ajax를 설정할 수있는 방법이 있습니까? 그래서 스크립트가 sinatra가 아닌 브라우저에서 직접 시작된 것과 같은 방식으로 작동합니까? 그래서 전체 아약스 호출이 끝났을 때가 아니라면 모든 블록의 결과를 볼 수 있습니다.
HAML 파일 (추출물)
:javascript
function loadXMLDoc2(mode)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("db2").innerHTML="<BLINK> processing</BLINK> "+mode+" procedure";
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("db2").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/ajaxdb2?mode="+mode,true);
xmlhttp.send();
}
%td
%button{:type => "button", :onclick => "loadXMLDoc2('create')"}
create DB2
%br
루비 코드 (추출물)
get '/ajaxdb2?' do
execute_db2_script(params['mode'].downcase)
end
def execute_db2_script(mode)
if not (mode == 'clear')
db2_database = 'RATIONAL'
url = "http://db2express/imacs/radek/db2.rft/rationalTest.php?mode=#{mode}&database=#{db2_database}"
uri = URI.parse(url)
start = Time.new
response = Net::HTTP.start(uri.host, uri.port) do |http|
http.open_timeout = 5
http.read_timeout = 1500
http.request_get(uri.request_uri)
end
stop = Time.new
return "#{response.body} <BR>processed in #{stop - start} seconds"
else
return "DB2 results"
end
end
PHP 코드 샘플 (2blocks)
flush_buffers();
$output = array();
$shellOutput = exec("echo 'password' | sudo -su db2inst1 -S '/opt/ibm/db2/V9.7/bin/db2 deactivate database $databaseName'", $output);
echo "<pre>Output = " . print_r($output,1) . "</pre>";
if(strpos($output[0],'DB20000I') === false && strpos($output[0],'SQL1496W') === false && strpos($output[0],'SQL1013N') === false && strpos($output[0],'SQL30061N') === false){
echo("Could not deactivate database.");
}
flush_buffers();
$output = array();
$shellOutput = exec("sudo -su db2inst1 -S '/opt/ibm/db2/V9.7/bin/db2 drop database $databaseName'", $output);
echo "<pre>Output = " . print_r($output,1) . "</pre>";
if(strpos($output[0],'DB20000I The DROP DATABASE command completed successfully') === false && strpos($output[0],'SQL1013N') === false && strpos($output[0],'SQL30061N') === false){
echo("Dropping of the database was not successful.");
}
누군가는 알고있다? – Radek
PHP 스크립트와 AJAX 코드를 게시 할 수 있습니까? 또한, "브라우저를 통해 스크립트를 실행하면 블록으로 출력을 브라우저로 보냅니다"라는 것이 무슨 뜻인지 잘 모르겠습니다. PHP 스크립트가 서버에 저장되어 있다고 가정하고 클라이언트 요청에 대한 응답으로 서버가 실행합니다. – jergason
@ Jergason : 거의 새로운 질문을 읽을 수 있습니다 :-) – Radek