the Web Design Speciailist
從一個 php 網頁去觸發另一個 php 網頁
2018-11-03 10:16:39  PHP


"PHP 在網頁上能做到從一支程式去觸發另一支程式嗎?
最後這二支程式都是同時獨立運行"
因為之前有寫過 PHP 的多緒行緒
感覺上是沒問題
不過深入了解後發現
其實同事的目的不需要用到多執行緒
只要用 curl  再搭配其他的 trick 就行了
用到多執行緒有點大材小用又不好寫
加上他說在 windows 上的 PHP 沒有支援多執行緒(真是殘念)

運作方式

在 A.php 用 curl (設 timeout = 1) 丟 request 給 B.php
B.php 的 ignore_user_abort、set_time_limit 可讓 B.php 在後端繼續執行
不會因連線狀態中止而停止執行
而 curl 的 timeout 設為 1
會讓 A.php 連線一秒後就斷線
所以 A.php 就繼續往下執行
而 B.php 也會繼續執行


A.php:跑二個迴圈,中間丟一個 request 給 B.php

  1. $i = 0;
  2.  
  3. do{
  4. echo $i;
  5.  
  6. $i++;
  7. if($i > 10)
  8. break;
  9.  
  10. }while(true);
  11.  
  12. echo " ";
  13.  
  14. $ch = curl_init();
  15. curl_setopt($ch, CURLOPT_TIMEOUT, 1);
  16. curl_setopt($ch, CURLOPT_URL, "http://www.xxx.com/b.php");
  17. curl_exec($ch);
  18. curl_close($ch);
  19.  
  20. $i = 0;
  21.  
  22. do{
  23. echo $i;
  24.  
  25. $i++;
  26. if($i > 10)
  27. break;
  28.  
  29. }while(true);

B.php:一秒產生一個檔案


  1. ignore_user_abort(true);
  2. set_time_limit(0);
  3. $interval = 1;
  4. $i = 0;
  5.  
  6. do{
  7. sleep($interval);
  8.  
  9. $str = "Hello World";
  10. $file = fopen($i.".txt","a+"); //開啟檔案
  11. fwrite($file,$str);
  12. fclose($file);
  13.  
  14. $i++;
  15. if($i > 10)
  16. break;
  17.  
  18. }while(true);


瀏覽器向伺服器取得網頁
是以送出一個 request 跟接收一個 response 為一個循環
但是瀏覽器等待 response 時間太久
等到 timeout 時也會中斷連線
所以利用 curl、timeout、ignore_user_abort、set_time_limit 等
就可以解決同事的問題
另外 ajax 應該也可以去觸發 B.php
ajax 只負責去丟 request
完全不用理會 response
這也是另一種方式


文章出處:http://allenj.info/article/post/293

如有侵權,請來信告知,將立馬關閉