2010-08-17 79 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