PHP Conference Japan 2024

ftp_put

(PHP 4, PHP 5, PHP 7, PHP 8)

ftp_put將檔案上傳至 FTP 伺服器

描述

ftp_put(
    FTP\Connection $ftp,
    string $remote_filename,
    string $local_filename,
    int $mode = FTP_BINARY,
    int $offset = 0
):bool

ftp_put() 將本機檔案儲存到 FTP 伺服器。

參數

ftp

一個 FTP\Connection 實例。

remote_filename

遠端檔案路徑。

local_filename

本機檔案路徑。

mode

傳輸模式。必須是 FTP_ASCIIFTP_BINARY

offset

開始上傳的遠端檔案位置。

傳回值

成功時傳回 true,失敗時傳回 false

變更日誌

版本 描述
8.1.0 ftp 參數現在預期一個 FTP\Connection 實例;先前預期一個 resource
7.3.0 mode 參數現在是可選的。以前是強制性的。

範例

範例 1 ftp_put() 範例

<?php
$file
= 'somefile.txt';
$remote_file = 'readme.txt';

// 設定基本連線
$ftp = ftp_connect($ftp_server);

// 使用使用者名稱和密碼登入
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// 上傳檔案
if (ftp_put($ftp, $remote_file, $file, FTP_ASCII)) {
echo
"成功上傳 $file\n";
} else {
echo
"上傳 $file 時發生問題\n";
}

// 關閉連線
ftp_close($ftp);
?>

參見

  • ftp_pasv() - 開啟或關閉被動模式
  • ftp_fput() - 從開啟的檔案上傳至 FTP 伺服器
  • ftp_nb_fput() - 將檔案從開啟的檔案儲存到 FTP 伺服器(非阻塞)
  • ftp_nb_put() - 將檔案儲存到 FTP 伺服器(非阻塞)

新增註解

使用者提供的註解 33 則註解

darian lassan at yahoo de
21 年前
ftp_put() 會覆寫現有檔案。
再次:微不足道,但這裡沒有提到。
Anonymous
15 年前
如果在您使用 ftp_put 時收到下列錯誤之一

警告:ftp_put() [function.ftp-put]:開啟 ASCII 模式資料連線

警告:ftp_put() [function.ftp-put]:開啟二進位模式資料連線

並且它在正確的位置建立檔案,但檔案大小為 0kb,之後所有 FTP 命令都失敗。很可能是客戶端位於防火牆後方。若要修正此問題,請使用

<?php
ftp_pasv
($resource, true);
?>

在執行任何 put 命令之前。我花了好久才弄清楚這點,當我成功時我真的歡呼了 :D
koen dot depoorter at gmail dot com
17 年前
如果您在上傳檔案時發生逾時,即使是非常小的檔案,您也可以查看 ftp_pasv()

並且別忘了在 ftp_login() 之後執行它;

koen
todd
17 年前
這是一個非常微不足道的事情,但它讓我困惑了很久(好吧,直到我決定檢查錯誤日誌並看到錯誤為止)。我有一個很大的檔案(一個大型論壇的 mysql 備份),只上傳了一部分到遠端備份伺服器。一直搞不清楚原因,直到我意識到,由於上傳此檔案的時間超過 30 秒,因此已達到最大執行時間。

<?php
set_time_limit
(0);
其餘程式碼在此....
?>

這樣就解決了問題。這是其中一個愚蠢、微不足道的事情,如果您遇到像我這樣的問題,這可能是您忽略的事情。
oheil at ecc-gmbh dot de
22 年前
如果您想要複製整個目錄樹(包含子目錄),
這個函數 (ftp_copy) 可能很有用。已使用
php 4.2.2 和 Linux OS 進行測試。

範例
----------------------------------------------------------------
$conn_id = ftp_connect("server_adress");
...

$src_dir = "/from";
$dst_dir = "/to";

ftp_copy($src_dir, $dst_dir);
...
ftp_close($conn_id)

函數:ftp_copy()
----------------------------------------------------------------
function ftp_copy($src_dir, $dst_dir) {

global $conn_id;

$d = dir($src_dir);

while($file = $d->read()) {

if ($file != "." && $file != "..") {

if (is_dir($src_dir."/".$file)) {

if (!@ftp_chdir($conn_id, $dst_dir."/".$file)) {

ftp_mkdir($conn_id, $dst_dir."/".$file);
}

ftp_copy($src_dir."/".$file, $dst_dir."/".$file);
}
else {

$upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY);
}
}
}

$d->close();
}
jan at odvarko dot cz
3 年前
另一個遞迴 ftp_put。

* 參數與 ftp_put 的參數類似,因此如果您需要複製目錄,只需使用 ftp_put_dir(...) 而不是 ftp_put(...)。
* 另一個優點是遠端目錄不需要存在。
* 成功時傳回 TRUE,失敗時傳回 FALSE。
* 靈感來自 lucas at rufy dot com 和 webmaster at sweetphp dot com。

<?php

function ftp_put_dir($ftp, $remote_dirname, $local_dirname, $mode=FTP_BINARY) {
$success = true;

// 如果有需要,建立遠端目錄。
if (!ftp_nlist($ftp, $remote_dirname)) {
if (
ftp_mkdir($ftp, $remote_dirname) === false) {
$success = false;
}
}

$dir = dir($local_dirname);
while (
$f = $dir->read()) {
if (
$f === '.' || $f === '..') {
continue;
}
$lf = $local_dirname . '/' . $f;
$rf = $remote_dirname . '/' . $f;

if (
is_dir($lf)) {
if (!
ftp_put_dir($ftp, $rf, $lf, $mode)) {
$success = false;
}
} else {
if (!
ftp_put($ftp, $rf, $lf, $mode)) {
$success = false;
}
}
}
$dir->close();

return
$success;
}

?>
lucas at rufy dot com
21 年前
以下是一個經過完整測試的函式 (基於先前的註解),可將檔案從來源目錄遞迴地傳送到目的地目錄。如需更多資訊,請參閱 http://rufy.com/tech/archives/000026.html

注意:目的地目錄請使用完整路徑名稱,且目的地目錄必須已存在

function ftp_putAll($conn_id, $src_dir, $dst_dir) {
$d = dir($src_dir);
while($file = $d->read()) { // 對目錄中的每個檔案執行此操作
if ($file != "." && $file != "..") { // 為了防止無限迴圈
if (is_dir($src_dir."/".$file)) { // 如果是目錄,則執行以下操作
if (!@ftp_chdir($conn_id, $dst_dir."/".$file)) {
ftp_mkdir($conn_id, $dst_dir."/".$file); // 建立尚未存在的目錄
}
ftp_putAll($conn_id, $src_dir."/".$file, $dst_dir."/".$file); // 遞迴部分
} else {
$upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // 上傳檔案
}
}
}
$d->close();
}
Saeven
21 年前
如果您檢查第一個使用者提交的函式 `ftp_putAll`,它只有在您提取這一行及其相符的括號時才會運作。

if (!@ftp_chdir($conn_id, $dst_dir."/".$file))

該函式會在將檔案上傳到該目錄之前,先將目錄變更為該目錄。這會改變您的上傳路徑,系統會嘗試上傳到一個基本上不存在的目錄 (最後會重複)。

希望這對你們有所幫助。
乾杯。
Saeven
herok at atwatcher dot com
20 年前
victor at nobel dot com dot br 寫道
正確的目錄路徑格式會將 "/home/USER/" 從公開路徑中排除,但對於我的伺服器,我必須使用它才能使我的腳本正常運作。

對大多數人來說這可能很明顯,但我認為您無法使用 $_SERVER['DOCUMENT_ROOT'] 路徑,因為 FTP 從您的頂層開始,因此會繞過 (或只是不辨識) 大部分虛擬伺服器路徑。
tom pittlik
18 年前
`ftp_put()` 會顯示令人困惑的警告訊息,因為它會傳回遠端伺服器回應的一行,而該回應可能有多行。

如果您要傳輸大量檔案,請注意某些檔案系統每個目錄僅支援最多 2000 個檔案。這讓我困惑了一段時間。
Aditya P Bhatt (adityabhai at gmail dot com)
16 年前
這是我用於相同函式的程式碼,在靜態程式碼中具有更高的彈性
<?
$name = "檔案名稱";
$filename = "包含完整路徑的檔案名稱";

//-- Aditya Bhatt 於 2008 年 3 月 6 日撰寫的在伺服器上傳輸檔案的程式碼 --//
//-- 連線設定
$ftp_server = "IP 位址"; // FTP 伺服器的位址。
$ftp_user_name = "伺服器使用者名稱"; // 使用者名稱
$ftp_user_pass = "伺服器密碼"; // 密碼
$destination_file = "透過 FTP_PUT 上傳的伺服器檔案路徑"; //您想要將檔案放置在網頁伺服器上的位置 (相對於您的登入目錄)

$conn_id = ftp_connect($ftp_server) or die("<span style='color:#FF0000'><h2>無法連線到 $ftp_server</h2></span>"); // 設定基本連線

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) or die("<span style='color:#FF0000'><h2>您沒有存取此 ftp 伺服器的權限!</h2></span>"); // 使用使用者名稱和密碼登入,或給出使用者無效訊息

if ((!$conn_id) || (!$login_result)) { // 檢查連線
// 永遠不會命中此處,因為 ftp_login 上有 die 呼叫
echo "<span style='color:#FF0000'><h2>FTP 連線失敗!<br />";
echo "嘗試連線到 $ftp_server,使用者為 $ftp_user_name</h2></span>";
exit;
} else {
//echo "已連線到 $ftp_server,使用者為 $ftp_user_name <br />";
}

$upload = ftp_put($conn_id, $destination_file.$name, $filename, FTP_BINARY); // 上傳檔案
if (!$upload) { // 檢查上傳狀態
echo "<span style='color:#FF0000'><h2>FTP 上傳 $filename 失敗!</h2></span> <br />";
} else {
echo "<span style='color:#339900'><h2>成功完成 $name 的上傳!</h2></span><br /><br />";
}
ftp_close($conn_id); // 關閉 FTP 串流
?>
Kev
15 年前
收到這個神秘的錯誤

Warning: ftp_put() [function.ftp-put]: 'STOR' not understood in
C:\wamp\www\kevtest\ftp_todays.php on line 48

找到問題,您不能將路徑放到目的地檔案
(即使我可以在 dos ftp 用戶端中執行此操作...?)

例如 - 這個不起作用
ftp_put($conn, '/www/site/file.html','c:/wamp/www/site/file.html',FTP_BINARY);

您必須輸入

<?php
ftp_chdir
($conn, '/www/site/');
ftp_put($conn,'file.html', 'c:/wamp/www/site/file.html', FTP_BINARY );
?>
florian dot ember at gmail dot com
16 年前
目前,沒有任何函式可讓您將檔案內容指定為字串。但是,有一個 ftp_fput(),它可以操作開啟的檔案。將此函式與 tmpfile() 結合使用可讓您模擬此類函式。(您也可以使用 php://memory,但這會破壞 BC)。

<?php
function ftp_fputs($ftp_stream, $remote_file, $contents, $mode, $startpos = 0)
{
$tmp = tmpfile();
fwrite($tmp, $contents);
rewind($tmp);
$result = ftp_fput($ftp_stream, $remote_file, $tmp, $mode, $startpos);
fclose($tmp);
return
$result;
}
?>
Svinto
14 年前
我 [遇到了一個錯誤,] `ftp_pasv` 並未解決該問題。原因如下

FTP 在不同的連接埠上使用 2 個連線,一個用於連線/交握,另一個用於資料傳輸。
問題在於 ftp 伺服器 (php 連線到的伺服器) 也針對不同的連線使用不同的 IP 位址 (真假!?)。
通常,防火牆 (csf) 會偵測到 ftp 連線並允許它們通過,但由於 IP 位址不同,這無法運作。

解決方案
1 封憤怒的電子郵件給 ftp 伺服器擁有者。
允許防火牆中的第二個 IP。
Ari
17 年前
我正在從伺服器複製相當大的備份檔案到伺服器。`ftp_put` 一開始運作正常,直到偶爾開始回報錯誤。
當我將 TRUE 設定為 `ftp_pasv()` 的值 (登入後) 時,`ftp_put` 又開始運作了。
webmaster at sweetphp dot com
19 年前
以下是針對 lucas at rufy dot com 下方函式的修正,它將從來源目錄遞迴地放置檔案到目的地目錄。如下所示,它不會將檔案放置在已存在的目錄中,因為目的地會被更改。因此,這是修正後的函式,可使其運作

function ftp_putAll($conn_id, $src_dir, $dst_dir) {
$d = dir($src_dir);
while($file = $d->read()) { // 對目錄中的每個檔案執行此操作
if ($file != "." && $file != "..") { // 為了防止無限迴圈
if (is_dir($src_dir."/".$file)) { // 如果是目錄,則執行以下操作
if (!@ftp_nlist($conn_id, $dst_dir."/".$file)) {
ftp_mkdir($conn_id, $dst_dir."/".$file); // 建立尚未存在的目錄
}
ftp_putAll($conn_id, $src_dir."/".$file, $dst_dir."/".$file); // 遞迴部分
} else {
$upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // 上傳檔案
}
}
}
$d->close();
}
ben at over dot bomb
19 年前
我花了一些時間來偵錯一個愚蠢的問題

在 php >= 5 中,`ftp_put()` 顯然會倒轉到檔案的開頭,而不論您在將檔案傳送到 $host 之前將其保留在何種狀態。

我發現這個問題的原因是我在使用 ftp_put() 之前沒有關閉檔案控制代碼。由於我剛寫入檔案,檔案指標必定位於*底部*。

我在 php 4.2.2 上傳送 0 位元組的檔案時出現問題,但在 php 5 上則正常運作。

所以,提醒一下,別忘了關閉那些檔案控制代碼。即使我使用檔案名稱作為 ftp_put 的參數,它仍然需要關閉。

我沒有對檔案控制代碼呼叫 rewind,只是呼叫了 fclose($file_h)。
匿名
12 年前
嗨!

如果你在嘗試傳送資料到伺服器時遇到這個錯誤
警告:ftp_put() [function.ftp-put]:無法建立資料連線:連線逾時...

有兩個解決方案
- 將程式 httpd.exe 加入你的防火牆外部連線的例外清單中。實際上,FTP 協定會開啟一個新的 socket 來傳輸資料。而這個 socket 是從伺服器開啟到客戶端(你的電腦)。這個程式的位置(對於 WAMP)在 C:\wamp\bin\apache\Apache[版本]\bin\
- 使用 ftp_pasv() 函式來啟用被動模式。在這種模式下,是由客戶端開啟新的 socket 到伺服器。
Icy_Tiger_2000 at yahoo dot com dot au
19 年前
我因為那個特定的伺服器,在讓 ftp_put 運作上遇到了一些麻煩。從先前的網頁表單解析的所有變數和資料都必須使用 $_POST、$_GET 或 $_FILES 來擷取。

如果你不知道你傳送了什麼,請使用 phpinfo(); 來顯示伺服器對你的資料的想法。

所以...當使用表單和 PHP 傳送檔案時,請確保所有資料(文字檔案等等...)都使用 $_POST 擷取,而檔案(smiley.png、compression.zip 等等...)都使用 $_FILES 擷取。

以下是你的 results.php 檔案開頭可能看起來的樣子
<?PHP
$myName
= $_POST['name']; //這會將文字複製到變數中
$myFile = $_FILES['file_name']; // 這會從儲存的檔案資訊中建立一個陣列。
?>

現在,當談到傳輸該資訊時...

<?PHP
$destination_path
= "src/bin/";

//你要將檔案丟到網路伺服器上的位置(相對於你的登入目錄)

$destination_file = $destination_path."img.jpg";

//這將建立一個完整的路徑,並在結尾加上檔案,供你使用,我喜歡這樣分割變數,以防我需要單獨使用它們,或者我正在動態建立新資料夾。

$file = $myFile['tmp_name'];

//將陣列轉換為一個新的字串,其中包含你的檔案在伺服器上的路徑名稱。

$upload = ftp_put($conn_id, $destination_file, $file, FTP_BINARY);// 上傳檔案
if (!$upload) {// 檢查上傳狀態
echo "FTP 上傳 $destination_file 失敗!";
} else {
echo
"已將 $file 上傳到 $conn_id 作為 $destination_file";
}
?>

希望這有幫助 ^_^
lourspolair at banquiz dot net
14 年前
嗨,

我嘗試透過 FTP 連線上傳一個以 tab 分隔的 CSV 格式的文字檔案。

我使用
ftp_put($connect_id, $fileFullName, $localFile, FTP_ASCII);

一切順利,但目的地伺服器中的 txt 檔案在資料行之間出現空白行...

我嘗試
ftp_put($connect_id, $fileFullName, $localFile, FTP_BINARY);
一切都沒問題了。

所以,讓我們以二進位模式進行。
JDD
14 年前
如果你不知道...有些網路託管服務不允許對外 FTP,除非你有專屬伺服器帳戶。「共享」託管帳戶通常沒有此功能。

因此,如果你無法讓你的 ftp、curl 或 ssh 遠端檔案傳輸功能運作,請洽詢託管服務並詢問。你可能需要升級你的帳戶。
bintjes at gmail dot com
15 年前
我看到兩則關於 "ftp_copy" 函式的說明,但我認為他們對 "ftp_copy" 函式應該做什麼存在誤解。對我來說,它應該像 ftp_rename 一樣,保留原始檔案並將其複製到同一 ftp 伺服器上的其他位置,至於他們,他們認為其目的是將本機檔案複製到遠端的 ftp .. 好吧 .. 因為在 FTP 協定中沒有 FTP COPY 命令這回事,我認為你可以自由地解釋你想要的。
所以這是我使用 ftp_put 和 ftp_get 的解決方案 ..

<?php
// bool ftp_copy ( resource $ftp_stream , string $initialpath, string $newpath, string $imagename )
function ftp_copy($conn_distant , $pathftp , $pathftpimg ,$img){
// 擷取影像,然後將其放回新的資料夾中
if(ftp_get($conn_distant, TEMPFOLDER.$img, $pathftp.'/'.$img ,FTP_BINARY)){
if(
ftp_put($conn_distant, $pathftpimg.'/'.$img ,TEMPFOLDER.$img , FTP_BINARY)){
unlink(TEMPFOLDER.$img) ;
} else{
return
false;
}

}else{
return
false ;
}
return
true ;
}
?>
darleys at darleys dot org
7 年前
-----FTP PUT 內容 (php 7.0) ---
$tmpFile = tmpfile();
fwrite($tmpFile, $contents);
rewind($tmpFile);
$tmpMetaData = stream_get_meta_data($tmpFile);

if (ftp_put($ftpObj, $remoteFile, $tmpMetaData['uri'], FTP_ASCII)) {
echo "成功";
}else {
echo "失敗"
}
fclose($tmpFile);
jaxx1rr@g
8 年前
請將 ftp_pasv($conn_id, true); 加入第一個範例(在 ftp_login 之後),難道你沒看到這麼多使用者沒有它而遇到問題嗎?
fabiogoncalves at live dot co dot uk
9 年前
我嘗試使用 FTP_ASCII 上傳 WAV 檔案,上傳後檔案充滿雜訊。

所以對於 WAV 檔案,請使用 FTP_BINARY。

希望這有幫助。
dherran at gmail dot com
16 年前
如果你要將檔案從同一個伺服器內的某個資料夾移動到另一個資料夾,「本機檔案」欄位必須根據執行 ftp_put() 函式的腳本位置,以相對路徑表示。

例如,你的函式在:/public_html/do_ftp.php 上執行,而你想將 /public_html/products.php 移動到 /public_html/backup/products.php

建立函式的正確方式是

ftp_put($ftp_id, '/public_html/backup/products.php', 'products.php', FTP_ASCII);

在花費了兩天試圖使用兩個欄位中的絕對路徑使此函式運作後,我終於找到了正確的使用方法。我希望這對某人有所幫助。請原諒我的英文,它不是我的母語。
clambert at whitecrown dot net
23 年前
當使用 PHP 4.04b4 以下的版本時,ftp_put 命令在 NT/IIS4 上無法運作。大多數其他函式都可以運作,但是在嘗試向上游 IIS 網頁伺服器傳送資料時存在錯誤。
donjajo at 2netlodge dot com
11 年前
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>由 2netlodge 撰寫的簡單 FTP 上傳 PHP 腳本</title>
</head>

<body>
<?php
if(isset($_POST['ftp']))
{
$ftp = $_POST['ftp'];
$username = $_POST['username'];
$pwd = $_POST['pwd'];
$filename = $_FILES['file']['name'];
$tmp = $_FILES['file']['tmp_name'];
$d = $_POST['des'];

$connect = ftp_connect($ftp)or die("無法連線到主機");
ftp_login($connect,$username,$pwd)or die("授權失敗");
echo
"已連線!<br/>";

if(!
$filename)
{
echo
"請選擇檔案";
}
else
{
ftp_put($connect,$d.'/'.$filename,$tmp,FTP_ASCII)or die("無法上傳");
echo
"檔案已成功上傳至 FTP";
}
}


?>
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="ftp" placeholder="FTP 連結"/><br/>
<input type="text" name="username" placeholder="使用者名稱"/><br/>
<input type="password" name="pwd" placeholder="密碼"/><br/>
<input type="file" name="file" /><br/>
<input type="text" name="des" placeholder="目的地" /><br/>
<br/><input type="submit" value="上傳"/></form>

</body>
</html>
匿名
12 年前
如果您收到非常有用的警告...
"開啟二進制模式資料連線" 或
"開啟 ASCII 模式資料連線"

...並且已嘗試過 ftp_pasv、ftp_alloc、在 FTP_ASCII 或 FTP_BINARY 之間切換,並責怪 FTP 提供商(就像我一樣),請嘗試使用 ftp_close 然後 ftp_connect 來重設您的 FTP 連線。對我來說有效!
emailfire at gmail dot com
16 年前
我花了很長的時間才弄清楚,但如果您路徑正確,這會有效!

<?php
function ftp_copy($file) {
global
$conn_id;
$ftp_root = '/public_html/';
$site_root = '/home/usr/public_html/';
return
ftp_put($conn_id, $ftp_root . $file, $site_root . $file, FTP_BINARY);
}
?>

使用 FTP 用戶端登入您的網站以檢索 $ftp_root

使用類似 getcwd() 的方法來取得 $site root
jrisken at mn dot rr dot com
19 年前
這個針對常見問題的解決方案在其他地方有所暗示,但我認為將其全部放在一處可能會很有用(因為我花了幾個小時才把它們拼湊起來!)

有時,網路主機會以 'nobody' 的使用者開啟 PHP 會話。此使用者建立的檔案可能沒有正確的權限,讓網站的實際擁有者管理這些檔案。以下腳本允許實際擁有者開啟目錄的存取權限,以便 'nobody' 可以使用 fopen() 建立檔案。然後,使用 'nobody' 建立的處理程式,ftp_fput() 命令會以正確的擁有者身分儲存檔案。 'nobody' 建立的檔案將被丟棄。
<?
$connection = ftp_connect($ftpServer);
ftp_login($connection, $ftpUser, $ftpPass);
ftp_chdir($connection, $ftpDir);
// 開啟目錄,以便 'nobody' 可以建立暫存檔
ftp_site($cn, "CHMOD 777 $ftpDir");
$new="tempFile";
@unlink($new); // 以防萬一
$handle=fopen($new,"x");
chmod($new,0777);
fputs($handle,"一堆東西...");
fclose($handle); // 必須倒帶
$handle=fopen("tempFile","r");
ftp_fput($connection, "finalFile", $handle, FTP_ASCII);
fclose($handle);
unlink($new);
// 移除目錄的開放存取權限
ftp_site($connection, "CHMOD 755 $ftpDir")
ftp_close($connection);
?>
lousrpolair at banquiz dot net
14 年前
嗨,

我嘗試透過 FTP 連線上傳一個以 tab 分隔的 CSV 格式的文字檔案。

我使用
ftp_put($connect_id, $fileFullName, $localFile, FTP_ASCII);

一切順利,但目的地伺服器中的 txt 檔案在資料行之間出現空白行...

我嘗試
ftp_put($connect_id, $fileFullName, $localFile, FTP_BINARY);
一切都沒問題了。

所以,讓我們以二進位模式進行。
kiwo1 at yahoo dot com
22 年前
朋友們,
如果您想透過表單將硬碟中的檔案上傳到指定的 ftp,這個範例可以幫助您...
首先建立表單
<html>

<body marginwidth=4 marginheight=4 topmargin=4 leftmargin=4 bgcolor=white vlink="#0000ff" link="#0000ff">

<form name="Attachments" method=POST action="sendimage.php" enctype="multipart/form-data">

<input type=hidden name=box value="">

<tr>
<td nowrap width="1%">&nbsp;&nbsp;<b>圖片:</b></td>
<td colspan=2>
<input type=file name=source_file size=20> <br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

</td>
</tr>
<input type=submit name=btnSubmit value=提交 size=20 style="border: 1px solid #0000FF"></form>
</body>
</html>

這個表單的關鍵點是使用 enctype="multipart/form-data"
如果您不使用這一部分,您的上傳操作將無法運作。
然後您必須建立 sendimage.php 如下

<?php

$ftp_server
='190.148.20.201';//伺服器 IP
$conn_id = ftp_connect($ftp_server);


// 使用使用者名稱和密碼登入
$user="username";
$passwd="*****";
$login_result = ftp_login($conn_id, $user, $passwd);

// 檢查連線
if ((!$conn_id) || (!$login_result)) {
echo
"FTP 連線失敗!";
echo
"嘗試連線到 $ftp_server 給使用者 $ftp_user_name";
die;
} else {
echo
"<br>已連線到 $ftp_server,給使用者 $user<br>";
}
//目錄如 /www.velibaba.com/images
ftp_chdir($conn_id, "www.velibab.com");
ftp_chdir($conn_id, "compimages");

//$destination_file=ftp_pwd($conn_id);

$destination_file="x.jpg";
echo (
"<br>");
print
$destination_file;

echo (
"<br>");

// 上傳檔案
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

// 檢查上傳狀態
if (!$upload) {
echo
"FTP 上傳失敗!";
} else {
echo
"已將 $source_file 上傳至 $ftp_server 作為 $destination_file";
}

// 關閉 FTP 串流
ftp_close($conn_id);
?>

在此範例程式碼中,$source_file 是您磁碟中檔案的路徑,而 destination file 是 ftpserver 中上傳的檔案名稱。
在此程式碼中,我使用 ftp_chdir 來提供
上傳檔案在 ftpserver 中的路徑..
關於 PHP 各種類別的問題,我的電子郵件:kiwo1@yahoo.com
再見...
To Top