亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CURL FTP 連接僅在托管時被拒絕

CURL FTP 連接僅在托管時被拒絕

PHP
Cats萌萌 2023-10-22 22:05:30
我使用 PHP 和 Curl 連接到 FTP 服務器,奇怪的是,當我在本地設置中嘗試我的代碼時,它以隱式 TLS 和顯式 TLS 方式工作,但是當我在任何服務器上運行相同的代碼時,它不會不工作并返回Connection refused。PHP代碼是:<?phpfunction simple_list_test() {    $curlopts = [];    $debug = true;    $return = null;        $curlopts[CURLOPT_USERPWD] = "{$user}:{$password}";    $curlopts[CURLOPT_SSL_VERIFYPEER] = false;    $curlopts[CURLOPT_SSL_VERIFYHOST] = false;    $curlopts[CURLOPT_FTP_SSL] = CURLFTPSSL_TRY;    $curlopts[CURLOPT_FTPSSLAUTH] = CURLFTPAUTH_TLS;    $curlopts[CURLOPT_RETURNTRANSFER] = true;    $curlopts[CURLOPT_URL] = "ftp://ftp.avidafinance.com:21/"; // I tried with ftps:// protocol too it works on local but not when you run it on a hosting    $curlopts[CURLOPT_FTPLISTONLY] = 1;    $curlopts[CURLOPT_UPLOAD] = 0;    $curlopts[CURLOPT_RETURNTRANSFER] = 1;    $ch = curl_init();    foreach($curlopts as $key => $value) {        curl_setopt($ch, $key, $value);    }    if ($debug) {        curl_setopt($ch, CURLOPT_VERBOSE, true);        $verbose = fopen('php://temp', 'w+');        curl_setopt($ch, CURLOPT_STDERR, $verbose);    }    $return = curl_exec($ch);    if ($debug) {        rewind($verbose);        $verboseLog = stream_get_contents($verbose);        echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";    }    if ($error = curl_error($ch)) {        throw new Exception($error);    }    return $return;}我花了一整天的時間,嘗試了很多方法,包括設置CURLOPT_PORT,設置ftps://協議,增加超時,包括服務器.crt和.pem帶有curl的證書,但沒有一個起作用,所以我想知道是否有人可以幫助我,簡而言之,我需要一個Explicit FTP Over TLS連接,我嘗試過curl, ftp_ssl_connect fsockets, .... 它們都不起作用,我將不勝感激任何幫助,它不一定必須與curl一起使用
查看完整描述

3 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

經過幾周的嘗試,我發現正如您在詳細信息中看到的那樣,連接和登錄工作正常,因為它們位于端口 21 上,但當涉及到目錄列表和上傳/下載時,因為 FTP 服務器使用的是他們的端口不同,它拒絕連接,這是由于我的托管提供商的防火墻不允許這些端口上的傳出連接,我要求他們打開端口范圍,問題解決了



查看完整回答
反對 回復 2023-10-22
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

讓我們總結一下這里的內容:

在主動模式 FTP 中,客戶端從隨機非特權端口 (N > 1023) 連接到 FTP 服務器的命令端口(端口 21)。

在被動模式 FTP 中,客戶端發起到服務器的兩個連接,解決了防火墻過濾從服務器到客戶端的傳入數據端口連接的問題。打開 FTP 連接時,客戶端會在本地打開兩個隨機非特權端口(N > 1023 和 N+1)。

由于非限制端口策略,這在您的計算機上有效,很高興知道這在服務器上不起作用,在服務器上您不能只是“開放端口”。

我有一個類似的問題,我用 Python ftputil 庫解決了這個問題。


查看完整回答
反對 回復 2023-10-22
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

您嘗試過被動模式嗎?

$curlopts[CURLOPT_FTP_USE_EPRT] = 1;


查看完整回答
反對 回復 2023-10-22
  • 3 回答
  • 0 關注
  • 211 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號