我有一臺PC通過PHP運行一些FTP,我知道在1-2個月前工作,但現在我回到它上面我發現PC已不再工作。我知道我一直在使用PC,但我無法想象可能發生了什麼變化。PHP ftp_put返回「無法建立數據連接:連接被拒絕」
的PHP拋出了錯誤信息讀取
無法建立數據連接:連接被拒絕
...當我用ftp_put()
功能。
我使用的削減代碼:
<?php
$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);
$server="***.***.***.***";
$port=21;
echo "<LI>Connecting to $server:$port<BR>";
$conn_id = ftp_connect($server,$port,9999999) or die("<BR>Unable to connect to ".$server.":$port server.");
if (!$conn_id) {
$errmsg = $php_errormsg;
echo "<BR><LI>ERR:$errmsg";
}
else {
$passive=false;
echo "<LI>Setting Passive Mode=$passive";
ftp_pasv($conn_id, $passive);
$user="*********";
$pass="*********";
echo "<LI>Connecting as $user/*****";
if (!ftp_login($conn_id, $user, $pass)) {
$msg = "Failed to login to $selected_server as $user; <BR>check logincredentials in the Settings";
echo "<BR><LI>$msg";
$errmsg = $php_errormsg;
echo "<LI>ERR:$errmsg";
return $msg;
}
ftp_set_option($conn_id, FTP_TIMEOUT_SEC, 10000);
if ([email protected]_put($conn_id, "test.txt", "C:......test.txt", FTP_BINARY)) {
echo "<BR><LI>ftp_put failed";
$errmsg = $php_errormsg;
echo "<LI>ERR:$errmsg";
}
echo "<HR>Done";
}
?>
爲網頁運行此當輸出
Connecting to ***.***.***.***:21
Setting Passive Mode=
Connecting as *******/*****
ftp_put failed
ERR:ftp_put(): Unable to build data connection: Connection refused
Done
的結果是ftp_put()
給出了錯誤信息,並留下一個零(0)字節文件在服務器上具有正確的文件名。
奇怪的是,是,
- 相同的代碼/連接信息工作在另一臺筆記本電腦OK
- 使用FileZilla中推着文件在幾個發生
- 問題時,相同的連接信息工程確定服務器(即它不只是一個具體的目的地,有問題)
此外,這似乎沒有任何關係與被動模式(它失敗與無線這個啓用)
有沒有人有任何建議?
謝謝
abe
注意,我們看到端口20和21在ftp_close()之前在cmd行上使用netstat -n打開。 PHP文檔建議端口20是數據通道,但我們正在討論有問題的INBOUND問題(服務器到PC)。 添加了防火牆規則以打開INBOUND上的端口20和21後,我可以看到php的工作原理。但目前尚不清楚(a)爲什麼PHP需要20端口(而Filezilla沒有),(b)爲什麼其他PC沒有相同的問題(都是公司PC,相同的型號/年齡/版本),以及(c)我應該使用什麼防火牆修復(如果有的話)。 – user1432181
因爲默認情況下FileZilla使用被動模式,所以你應該這樣做,就像重複問題中的答案所表明的那樣。 –
向我們展示詳細的FileZilla日誌。 –