iT邦幫忙

0

【PHP】如何使用PHP連上TLS的FTP上傳資料?

目前我寫的程式碼如下,但是出現的結果都是無法上傳資料,ftp_put這邊失敗。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FTP</title>
</head>
<body>

<?php 
$ftp_server="host";
$ftp_user_name="*****";
$ftp_user_pass="*****";
$file = "demo.txt";//tobe uploaded
$remote_file = "demo.txt";

// set up basic connection
$conn_id = ftp_ssl_connect($ftp_server,21,900);

ftp_pasv($conn_id, TRUE);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
    echo "successfully uploaded $file\n";
    exit;
} else {
    echo "There was a problem while uploading $file\n";
    exit;
    }
// close the connection
ftp_close($conn_id);
?>


</body>
</html>

可以請問到底哪裡出錯了呢?

1 個回答

0
raytracy
iT邦大神 1 級 ‧ 2021-09-14 12:38:48

可以 login 成功, 但卻不能 Put, 通常是 Data mode 不對造成的...

對方是開 Active mode 還是 Passive mode 給你?

看更多先前的回應...收起先前的回應...
alan0219 iT邦新手 5 級 ‧ 2021-09-14 13:22:18 檢舉

不清楚,請問這兩種模式如何去分別寫呢?這樣是否就能測試出來哪一種模式呢?

alan0219 iT邦新手 5 級 ‧ 2021-09-14 13:25:59 檢舉

我使用FileZilla Client測試,主動模式跟被動模式都能連上。

raytracy iT邦大神 1 級 ‧ 2021-09-14 13:32:13 檢舉

FileZilla 能連上, 但能傳檔嗎?
能傳進你要傳的那個資料夾底下嗎?

還有 FileZilla 有 Fallback 模式, 當你設定的 mode 連不上時, 它會自動切換另外一個 mode 去連; 你如何確定: 連上的是 Active or Passive, 沒有被他 Fallback 到另外一個去?

用 OS 底下的 FTP 指令, 以文字模式去連, 他不會自動切換 data mode, 你才會知道真正可用的 mode 是甚麼....

alan0219 iT邦新手 5 級 ‧ 2021-09-14 13:36:56 檢舉

FileZilla可以傳檔案,確定沒問題。
只是您說的文字模式去連我就不會了...

alan0219 iT邦新手 5 級 ‧ 2021-09-14 13:44:10 檢舉

我的程式碼中

ftp_pasv($conn_id, TRUE);

有加上這段,這就是被動模式開啟了對嗎?但是沒作用

我要發表回答

立即登入回答