2010-07-27 99 views
2

比方說,我連接到FTP通過發送一個Ajax請求PHP:如何使用FTP與Ajax?

$connection = ftp_connect($server); 
$login = ftp_login($connection, $ftp_user_name, $ftp_user_pass); 

這個請求之後,我想上傳一個文件:

$upload = ftp_put($connection, $dest, $source, $mode); 

有沒有辦法讓一個通過FTP連接到客戶端的服務器並不斷髮送Ajax請求而不重新建立服務器端的FTP連接?

謝謝!

回答

1

嗯..想到的唯一方法是分解PHP進程,然後修改一些共享資源(文件,shmem等)以將消息傳入/傳出AJAX進程和長時間運行的FTP進程。

但坦率地說,您可能想在這裏重新考慮您的問題/工具組合。這感覺有點像舊版本「如果你只有一把錘子,每一個問題都會變得像釘子一樣」。 PHP的主要優勢在於它專門處理單個請求,並在處理請求後清理它聲稱的所有資源。其他語言/平臺更持久,可能更適合您在此嘗試的內容。我在這裏思考Java或.Net。

+0

在這種情況下Java或.Net會更有幫助嗎?一旦ajax請求完成,我將不得不開始一個新的請求並創建一個新的FTP進程。或者我錯了? 我正在考慮以某種方式將FTP連接ID傳遞給ajax部分,並將其保留在那裏直到下一個請求。但在這種情況下,我不確定PHP是否會在我的下一個請求之前關閉FTP連接。而且我不確定如何獲取FTP連接ID,因爲它是一個PHP「資源」。 雖然這不是一個關鍵問題,因爲我每次發出ajax請求時都可以打開和關閉FTP連接。 – Vasily 2010-07-27 16:46:08

+0

也許我的回答應該以「不,除非......」開頭 您提出的問題源於這樣一個事實:PHP是一種非常要求以語言爲中心的語言,所以沒有 - 無法將連接從「向另一個請求(至少:據我所知)。如果FTP連接是在請求A中創建的,那麼它將與請求A一起死亡。 其他語言/平臺允許您創建與請求沒有直接關聯的資源,這就是爲什麼他們會幫助解決這個問題。 知道了 - 我能想到的唯一解決方案是創建一個單獨的進程,而不是綁定到您當前的請求:forked – kander 2010-07-27 17:03:56

+0

「如果FTP連接在請求A中創建,那麼它將與請求A一起死掉。」 - 非常好的和清楚的一點。謝謝! – Vasily 2010-07-27 17:25:35