簡體   English   中英

如何將數據發送到PHP腳本,並從同一腳本中恢復數據

[英]How to send data to a PHP script and imediatelly get data back from the same script

我在這里有一個類似的問題,但它面向PHP方面。 看起來PHP能夠接收一個數據包並立即(在同一個會話中)發送和回復。 我的問題是Delphi能做到嗎? 據我所知,答案是一個很大的NO。 我需要分兩步完成(兩個程序)。 問題是當第一個程序結束時,會話可能會關閉。 我可以在兩個過程調用之間保持會話打開。

我將為您提供PHPDelphi示例代碼。 我們將使用GET請求方法,因為它更容易,如果您不需要發送太多數據就足夠了。 我將從PHP腳本開始,因為它可以單獨測試,沒有Delphi應用程序(我們將使用瀏覽器進行測試)。

這是PHP腳本:

<?php
  $a=$_GET['a'];
  $b=$_GET['b'];
  echo intval($a)*intval($b);
?>

此腳本需要在URL(a和b)中編碼發送的兩個值,將值相乘並返回答案。 假設您正在運行LAMP的計算機上播放,並且您調用了此腳本script.php ,如果您在瀏覽器上導航到此腳本:

http://localhost/script.php?a=2&b=3

你會在瀏覽器中看到這個:

6

要分解我們在瀏覽器中寫入的URL:我們從服務器localhost請求頁面/script.php ,我們將此查詢字符串傳遞給腳本: a=2&b=3 之后的東西? 在URL中是查詢字符串; &符號分隔兩個單獨的參數=值對: a=2b=3 在PHP端,您使用$a=$_GET['a']來獲取參數a的值。 就這么簡單!

德爾福代碼

現在我們知道PHP腳本已啟動並運行,我們可以轉到Delphi部分。 這是一個使用可以想象的效率最低的方法將兩個值相乘的例程:

function MultiplyTwoNumbers(a,b:Integer):Integer;
var url: string;
    H: TIdHttp;
    SS: TStringStream;
begin
  // Prepare the URL
  url := 'http://fisiere.sediu.ro/script.php?a=' + IntToStr(a) + '&b=' + IntToStr(b);
  H := TIdHttp.Create(nil);
  try
    SS := TStringStream.Create;
    try
      H.Get(url, SS);
      Result := StrToInt(SS.DataString);
    finally SS.Free;
    end;
  finally H.Free;
  end;
end;

我故意將正確的工作URL留在那里,所以你可以實際測試我已知的工作腳本。

以下是您調用此例程的方法:

procedure TForm8.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;

摘要

  • HTTP是無狀態的,人們在維持某種狀態時會遇到很多麻煩。 您的Delphi app makes two calls, first to SendID then a second to GetDataBack想法不起作用,因為調用時服務器上運行的東西(實際上是GET) GetDataBack根本不知道有人調用(再次GETSendID
  • 令人高興的是,當從HTTP服務器GET數據時,我們可以使用查詢字符串輕松發送一些信息。 如果我們需要發送大量信息,我們將使用POST請求。

暫無
暫無

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

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