2014-01-23 5 views
0

저는 PHP cURL 멀티 핸들러를 사용하는 일부 FTP 서버와 함께 멀티 커넥션을 통해 이미 저를 다운로드하고 있습니다.PHP에서 cURL을 통해 FTP 최대 연결을 얻는 방법은 무엇입니까?

그리고 얼마나 많은 연결이 각 서버를 지원하는지 알고 싶습니다. 어떻게 컬 라이브러리로 이것을 할 수 있습니까?

+0

관리 아래에 ftp 서버가 있습니까? –

+0

@Tuga, 아니요, 그들은 내게 로그인 할 사용자/암호 만 제공합니다. – mikatakana

답변

1

관리자가 아닌 경우 특정 FTP 서버에 허용되는 동시 연결 수를 결정할 수 없습니다.

부분적인 해결책 1 : 연락처 : 당신이의 말은 ftp 50 개 개의 동시 연결을하자 서버가 오류를 max connections (#) exceeded

부분 해결 방법 2를 발행 할 때 확인하기 위해 시도 할 수있는 대안으로 ftp 관리자는 귀하에게 동시 접속 수를 물어 봅니다.

+0

각 관리자는 내 사이트에 자신의 서버에 대한 ftp-options를 입력합니다. 그리고 그는 연결 수를 선택할 수 있습니다. 그러나 나는 그들이 종종이 가치에 실수를 범한다는 것을 안다. 그리고이 작품의 자동화에 대해서 생각합니다. 그래서 50 개의 간단한 요청을 서버에 보내고 20, 10 등을 보낼 수 있습니다. 예를 들어, 루트 폴더에있는 파일 목록을'CURLOPT_FTPLISTONLY = 1'로 가져 오는 것입니다. – mikatakana

+0

좋은 옵션 인 것 같습니다. 이 방법을 사용하면 허용되는 동시 FTP 연결 수를 실제로 알 수 있습니다. 나중에 결과를 게시하십시오. –

+0

@mikatakana 문제를 해결할 수 있다면 질문을 올바르게 표시 할 수 있습니까? 감사. –

0

내 임시 방편

<?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); 

내가 틀렸다면, 저를 수정하십시오.

+0

Have 너 시험해? 얼마나 많은 동시 연결을 얻을 수 있습니까? –

+0

이유는 50 개의 연결이 최대이므로 필요한 것입니다. – mikatakana