簡體   English   中英

如何在PHP中通過cURL獲得FTP最大連接數?

[英]How to get FTP max connections via cURL in PHP?

我正在與一些具有PHP cURL多重處理程序的FTP服務器一起通過多重連接從它們下載成像器。

我想知道,每個服務器支持多少個連接。 我該如何使用curl庫?

除非您是管理員,否則將無法確定允許到某個FTP服務器的同時連接數量。

部分解決方案1:例如,您可以嘗試建立到ftp的50個同時連接,並檢查服務器何時發出錯誤, max connections (#) exceeded

部分解決方案2:與ftp管理員聯系,詢問他有權獲得多少同時連接。

我的臨時解決方案

<?php

$params = [
    'host'      => '{FTP_SERVER}',
    'user'      => '{FTP_LOGIN}',
    'password'  => '{FTP_PASSWORD}',
    'streams'   => {FTP_CONNECTIONS_COUNT}
];

$defaults = [
    CURLOPT_HEADER          => 1,
    CURLOPT_RETURNTRANSFER  => 0,
    CURLOPT_NOBODY          => 1,
    CURLOPT_USERPWD         => $params['user'] . ':' . $params['password'],
];

$mh = curl_multi_init();
$streams = [];

// Generate N requests to FTP-server
$tasks = array_fill(0, $params['streams'], $params['host'] . '/');

// Create streams
foreach ($tasks as $n => $task) {
    $ch = curl_init();
    curl_setopt_array($ch, $defaults + [
        CURLOPT_URL         => $task,
        CURLOPT_FTPLISTONLY => 0,
        CURLOPT_VERBOSE     => 0
    ]);

    curl_multi_add_handle($mh, $ch);
    $streams[$n] = $ch; 
}

// Process streams
$isAvailable = true;
do {
    curl_multi_exec($mh, $running);

    // Break if we have server error
    if ($i = curl_multi_info_read($mh) and curl_getinfo($i['handle'], CURLINFO_HTTP_CODE) > 500) {
        $isAvailable = false;
        break;
    }

    curl_multi_select($mh);
} while ($running > 0);

// Close streams
foreach ($streams as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

// Print result
var_dump($isAvailable);

請,如果我錯了,請糾正我。

暫無
暫無

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

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