2010-08-17 102 views
2

我有一個HTML瀏覽類型和提交按鈕的窗體。我使用瀏覽按鈕選擇一個文件並提交表單。在表單提交後,調用下面的代碼。如何在PHP中通過ftp上傳文件?

$conn_id="myid"; 
$conn_id = ftp_connect ('server'); 
$ftp_user_name="username"; 
$ftp_user_pass="password"; 

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

// check connection 
if ((! $conn_id) || (! $login_result)) { 
    echo "FTP connection has failed!" ; 
    exit; 

} else { 
    echo "Connected to for user $ftp_user_name" ; 
} 

// upload the file 
$upload = ftp_put($conn_id, "images/signatures/" . $fileName , $_FILES['tmp_name'] , FTP_BINARY); 

// check upload status 
if(!$upload){ 
    echo "FTP upload has failed!" ; 
} else { 
    echo "Successfully Uploaded." ; 
} 

但它產生以下警告:

Warning: ftp_put(): Filename cannot be empty in /var/www/echdp/_ProviderSignature.php on line 70 FTP upload has failed! 

但是,當我硬編碼在上面的代碼中的源路徑然後上傳在服務器上的文件:

$upload = ftp_put($conn_id, "images/signatures/myfile.txt" , "/var/www/images/hello.txt" , FTP_BINARY); 
+1

你確定你的html表單有'enctype ='multipart/form-data''屬性嗎?否則,$ _FILES數組將不會被填充,您將看到您所看到的錯誤。 – JCD 2010-08-17 13:15:52

回答

2

的HTML代碼加密類型示例:

<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="myfile" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

你有Form標籤enctype?如果沒有這個屬性,你的文件將不會被髮送。

用於調試$ _FILES數組。嘗試

var_dump($_FILES); 

查看數據是否正確。

您的變量:

$_FILES['tmp_name'] 

被錯誤地使用,因爲$ _FILES包含的文件不是一個文件。因此,你應該寫:

$_FILES['your-name-in-html-form']['tmp_name'] // your-name-in-html-form = myfile in the example above 

對例子看看:http://www.zymic.com/tutorials/php/creating-a-file-upload-form-with-php/

+0

是的,你是對的。 – Awan 2010-08-18 04:40:58

1

顯然$ _FILES ['tmp_name']不包含文件名。嘗試print_r($_FILES)以查看它包含的內容。此外,使用multipart/form-data作爲您的表單enctype。

2
$_FILES['tmp_name'] 

未命名的文件。它存儲在:

$_FILES['inputname']['tmp_name'] 

其中inputname是您的字段的名稱。另請檢查您的表單是否爲enctype =「multipart/form-data」。

請注意只需在服務器上放置用戶可發送的所有內容 - 如果有通過http訪問上傳的文件(如http://yoursite/images/signatures/uploadedfile.xxx),則可以將.php文件放在服務器上並執行它!

+0

你說得對。謝謝 – Awan 2010-08-18 04:41:55

3

試試這個:

$file = 'somefile.txt'; 
$remote_file = '/public_html/dir/dir2/dir3/somefile.txt'; 
$ftp_server = "yourdomain.in"; 
$ftp_user_name = "ftpusername"; 
$ftp_user_pass = "ftppassword"; 

// set up basic connection 
$conn_id = ftp_connect($ftp_server); 

// 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"; 
} else { 
echo "There was a problem while uploading $file\n"; 
} 

// close the connection 
ftp_close($conn_id); 

你的文件將在/public_html/dir/dir2/dir3/目錄域的上傳。
小心:在測試此功能時,切勿上傳索引文件。
來源:PHP.net