2015-03-30 77 views
0

是否可能在PHP中,以發送數據現在到客戶端,並繼續PHP處理(可能是阻塞)?現在發送數據到客戶端,並繼續PHP處理

<?php 

// some code 

echo json_encode(array('ok' => '1')); // the client is waiting for this AJAX answer !! 
// how to send the response right now before finishing this PHP file ? 

// the output is REALLY finished here, so client, you can work with it 

some_blocking_processing(); // this is just some server processing that would 
          // block the client for ~ 5 seconds 
          // but it produces no output useful for client 

?> 

我知道正確的方式可能是使用隊列或其他程序來進行處理。

但只是作爲一個普遍的問題,是否有可能發送數據到客戶端,在一個PHP文件中間

+1

是的,看看[輸出緩衝](http://php.net/manual/en/book.outcontrol.php) – 2015-03-30 22:18:07

+0

@JohnConde只需在開始時使用'ob_start()'和在'echo'之後使用'ob_flush()'。這就是全部? – Basj 2015-03-30 22:25:29

+0

最簡單的,是的。它可能需要更多的登錄,具體取決於你在做什麼,但這是它的基本要點。 – 2015-03-30 22:26:55

回答

1

那麼這真的取決於some_blocking_processing()實際上在做什麼。我不能在不知道那裏發生了什麼的情況下提出解決方案。

但是,我可以指出你可以在哪些方面做更多的研究。其中一個可能是您正確的解決方案:

  1. PHP threading
  2. 產卵異步PHP程序
  3. 登錄文件/數據庫的狀態,然後通過一個cron作業做額外的處理
+0

'some_blocking_processing()'確實從互聯網上下載了一個.JPG(不是從用戶上傳的...)並將其轉換成縮略圖。如果圖像很大(例如'5000x10000px'),則可能會阻擋2〜5秒。 – Basj 2015-03-31 00:05:02

+0

這是@Asquared:http://pastebin.com/aHCRwUtZ – Basj 2015-03-31 00:13:19

+0

爲什麼你不能在cron工作中這樣做?只需將文章中的文件名保存到隊列中(服務器或數據庫上的文本文件),然後使用cron作業下載並創建圖像。這個文件將完全獨立於你的php代碼,所以不會影響速度。 – 2015-03-31 00:41:38

相關問題