如何在PHP中通过ftp上传文件?

时间:2010-08-17 13:09:40

标签: php file upload ftp

我有一个带有html浏览类型和提交按钮的表单。我使用浏览按钮选择了一个文件并提交表单。在表单提交后,将调用代码。

$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 );

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

带有enctype的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>

enctype代码中有Form吗?没有该属性,您的文件将不会被发送。

用于调试$ _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/

答案 2 :(得分:2)

$_FILES['tmp_name'] 

不是您文件的名称。它存储在:

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

其中inputname是您的字段的名称。另请检查表单中的enctype =“multipart / form-data”。

请注意简单地在服务器上放置用户可以发送的所有内容 - 如果可以通过http访问上传的文件(如http://yoursite/images/signatures/uploadedfile.xxx),有人可以将.php文件放在您的服务器上并执行它!

答案 3 :(得分:1)

显然$ _FILES ['tmp_name']不包含文件名。尝试print_r($_FILES)查看其中包含的内容。另外,使用multipart / form-data作为表单enctype。