2012-11-15 48 views
3

E.g如何在php文件運行之前關閉與服務器的連接?

<?php 

//GetParameters here 

//send response/end connection 

//keep executing the script with the retrieved parameters. 
+0

會是什麼這種行爲的目的下

exec("nohup php -f otherscript.php -- '$arg1' '$arg2' < /dev/null &"); 

現在otherscript.php在後臺運行?你能給個例子嗎? – Jocelyn

+0

那麼,獲取數據,存儲它們,但關閉連接,而「存儲數據」正在進行中。這會減少php-cgi.exe程序。現在我有30多個php-cgi.exe一直在運行。我不想那樣。 –

+0

@DeusDeceit但即使關閉連接,php腳本也會在保存數據時繼續執行,所以我不明白爲什麼您認爲這會爲您節省30個php-cgi進程。 – Nelson

回答

1

你能做到這一點,它只是可能需要一些修修補補。與其試圖關閉第一個腳本上的連接,您需要使用不同的腳本處理數據。

<?php 

//Get Parameters 

//Send output to user 

//now use curl to access other script 

$post = http_build_query($_POST); // you can replace this with a processed array 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/otherscript.php"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_exec($ch); 
curl_close($ch); 

?> 

otherscript.php

<?php 

header("Connection: Close"); 

// do your processing 

?> 

只是爲了說明,當捲曲連接它得到一個連接關閉頭等等捲曲退出。與此同時,「別名」正在處理沒有開放連接的數據。

我很確定使用exec()也可能是一個選項。您可以簡單地在命令行上使用php調用otherscript作爲cmd行參數傳遞變量。像這樣的東西應該爲你工作,如果你運行的是Linux:一個不同的進程ID

+0

我有同樣的想法,但想知道是否可以在不更改腳本的情況下做到這一點。顯然到目前爲止沒有更好的主意 –