Model.request_run - kouji6309/SingleMVC GitHub Wiki

說明

執行一個或多個請求資源。通常接在 Model::request_async 後面。


原型

protected static request_run(
    mixed $rs,
    int $start = 0,
    int $length = -1,
    bool $get_header = false
) : mixed

參數

  • rs

    請求物件,可接受三種輸入:

    • cURL 控制代碼。
    • cURL 控制代碼的陣列,例
      [$ch1, $ch2]
    • 陣列項目的 request 索引為 cURL 控制代碼,例
      [
          ['request' => $ch1, 'other key' => ...], 
          ['request' => $ch2, 'other key' => ...],
      ]

    每種會傳回不同的結果。

  • start

    開始索引,若超過 rs 範圍則為 0。
    rs 為 cURL 控制代碼 則忽略。

  • length

    長度,表示從 start 開始執行幾個,若為 -1 或超過結陣列尾則執行全部。
    rs 為 cURL 控制代碼 則忽略。

  • get_header

    是否傳回 Header,是則將結果結構改為

    ['header' => [ ... ], 'content' => '...']

回應

  • 布林:false,執行失敗
  • 字串:回應內容,當 rs 為 cURL 控制代碼時。
  • 陣列:回應內容。
    • rs 為 cURL 控制代碼的陣列時,結構為
      ['...', '...', ...]
    • rs 為陣列項目的 request 索引為 cURL 控制代碼時,結構為
      [
          ['request' => $ch1, 'content' => '...', 'other key' => ...],
          ['request' => $ch2, 'content => ''...', 'other key' => ...],
          ...
      ]

應用

建立多個請求,之後同步執行請求

$chs = [];
for ($i = 1; $i <= 10; $i++) {
    $chs[] = self::request_async(
        'https://www.example.com/api/news',
        'get', ['id' => $i]
    );
}
$result = self::request_run($chs);

建立多個請求,之後分批同步執行請求

$chs = [];
for ($i = 1; $i <= 30; $i++) {
    $chs[] = self::request_async(
        'https://www.example.com/api/news',
        'get', ['id' => $i]
    );
}
$result1 = self::request_run($chs, 0, 10);
$result2 = self::request_run($chs, 10, 10);
$result3 = self::request_run($chs, 20, 10);

建立多個請求,並附加資料,之後同步執行請求,指定傳回 Header

$chs = [];
for ($i = 1; $i <= 10; $i++) {
    $chs[] = [
        'request' => self::request_async(
            'https://www.example.com/api/news',
            'get', ['id' => $i]
        ),
        'id' => $i,
    ];
}
$result = self::request_run($chs, 0, -1, true);
foreach ($result as $r) {
    if ($r['header']['Status'] == 200) {
        output('text', $r['id'].' is '.$r['content']."\n");
    }
}
⚠️ **GitHub.com Fallback** ⚠️