簡體   English   中英

將數據從HTML頁面發送到PHP腳本並在PHP中選擇數據

[英]Sending data from a HTML page to a PHP script and picking the data in PHP

我的HTML頁面

<html>
<body>
<form action="myScript.php" method="POST">
    Enter a transceiver ID:
    <br><br>
    <input type="text" name="id" >
    <br><br>
    <input type="submit" value="Submit">
</form>
</body>

我在服務器上運行的PHP腳本

<?php
$id_array = array("101");
while(1)
{
    if (isset($_POST['id']))
    { 
        $id = $_POST['id'];
        echo ("ID is ".$id."\n");
        array_push($transceiverID_array, $id);
    }
    print_r($id_array);
    usleep(5000000);
    // lot of processing will be done 
}
?>

我的PHP腳本永遠處於while循環中。 如果我從HTML頁面中發布了一些數據,則我的PHP腳本正在執行其他操作(這需要花費大量時間),並且不一定要處理檢查HTML頁面中的變量是否已設置的行。 因此,即使我從HTML頁面發布了某些內容,由於發布數據和isset行上的PHP腳本之間的持續時間很長,我的PHP腳本也無法提取數據。

在從HTML頁面發布的PHP腳本中,是否需要提取時間限制? 有什么更好的方法嗎?

另外,發布后,我的HTML頁面繼續等待我的PHP腳本響應。 有什么方法可以停止加載我的HTML頁面嗎?

正如其他評論員所問。 無限循環的意義何在? 服務器將代表您執行監聽請求的任務!

HTML頁面自然不接收任何內容,因為PHP腳本中的流程永遠不會結束。 刪除該循環,然后嘗試請求。

問題是您每次調用僅獲得一次HTTP參數。 如果創建無限循環,則不會從服務器獲得響應。 即使您的參數也不會更改,因為每次執行請求時都會分別調用PHP腳本。

為什么需要永遠跑步? 在別的地方做工作更好嗎,例如開始cronjob?

您的php確實有時間限制: http//php.net/manual/en/function.set-time-limit.php

但是,尚不清楚為什么要讓它永遠循環。 您的while 1循環將始終為true,因此“無限”運行此無限,但是受到限制。 (請參見上面的鏈接)

編輯:從此注釋: I cannot restart my script due to the processing that it is doing. If I use a cronjob, won't my script start from the beginning every time? It will re-initialize all the variables (which I did not show here), which I do not want I cannot restart my script due to the processing that it is doing. If I use a cronjob, won't my script start from the beginning every time? It will re-initialize all the variables (which I did not show here), which I do not want

我不確定僅使用PHP是否足以實現所需的功能。 您需要考慮一個持久層(內存,數據庫),以使變量在多個請求中均保持活動狀態。 while(1)不是您的操作方式。


通過閱讀您的文章,聽起來您好像誤解了HTTP / PHP。 似乎您正在嘗試創建一個循環,該循環將不斷“偵聽”來自HTML表單的POST值,就像您正在編寫Web服務器本身一樣。

這不是HTTP的工作方式。

  • 客戶端將發出GET請求以獲取您的HTML,然后腳本結束。
  • 然后,客戶端將使用數據發出POST請求,腳本將對其進行處理,然后結束。

每次都會發生這種情況,您的腳本將針對收到的每組POST值運行一次。 請注意,您的HTML不是“正在等待”,HTML是在GET請求中“完成”,您的瀏覽器現在正在向您的PHP腳本發出請求,直到輸出為止,它不會顯示任何內容。

現在,您說這是一個長期運行的過程,而且您不在乎。 一勞永逸,你說你不這樣做在這種情況下,最好使用一個可以觸發而不關心響應的AJAX請求。 另一種選擇是將請求啟動到iFrame或類似框架中。

無論哪種方式,刪除while循環都將使您能夠驗證請求正在執行中,如下所示:

<?php
    $id_array = array("101");
    if (isset($_POST['id']))
    { 
        $id = $_POST['id'];
        echo ("ID is ".$id."\n");
        array_push($transceiverID_array, $id);
    }
    print_r($id_array);
?>

如果要向瀏覽器提供反饋,則您嘗試執行的操作的一個選項是在移動過程中將內容刷新到瀏覽器。

嘗試發布到此腳本,看看會發生什么:

<?php
for($i = 0; $i < 5; $i++)
{
    echo $i;
    flush(); // Send processing so far to the browser
    ob_flush(); // For good measure
    sleep(1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM