2014-10-09 59 views
0

我已经尝试使用PHP中的ftp连接将文件上传到服务器,并且它不工作,它的连接和告诉上传成功,但没有图像将被上传到目录中... 。我曾尝试下面的代码,请通过纠正它图像不使用PHP cmds上传到FTP文件

image.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Welcome</title> 
</head> 

<body> 
<form enctype="multipart/form-data" action="upload.php" method="POST"> 
<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
Choose a file to upload: <input name="uploadedfile_1" type="file" /><br /> 
Choose a file to upload: <input name="uploadedfile_2" type="file" /><br /> 
<input type="submit" value="Upload Files" /> 
</form> 
</body> 
</html> 

upload.php的

<?php 
$ftp_server = "XXXXXX"; 
$ftp_username = "XXXXX"; 
$ftp_password = "XXXX"; 

$conn_id = ftp_connect($ftp_server) or die("could not connect to $ftp_server"); 

if(@ftp_login($conn_id, $ftp_username, $ftp_password)) 
{ 
    echo "connected as [email protected]$ftp_server\n"; 
    } 
else { 
    echo "could not connect as $ftp_username\n"; 
} 
$file = $_FILES["uploadedfile_1"]["name"]; 
$file2 = $_FILES["uploadedfile_2"]["name"]; 

$remote_file_path = "/imagetest/123/".$file; 
$remote_file_path2 = "/imagetest/123/".$file2; 

ftp_put($conn_id, $remote_file_path, $_FILES["uploadedfile_1"]["tmp_name"],FTP_ASCII); 
ftp_put($conn_id, $remote_file_path2, $_FILES["uploadedfile_2"]["tmp_name"],FTP_ASCII); 
ftp_close($conn_id); 
echo "\n\nconnection closed"; 
?> 
+0

路径应该是... $ remote_file_path =“./imagetest/123/".$file; – 2014-10-09 07:27:53

+0

您还需要使用ftp_put二进制模式的图像 – 2014-10-09 07:30:51

+0

@Jayakarthik Appasamy不工作,然后也...... – Redsun 2014-10-09 07:33:19

回答

0

试图帮助..

$remote_file_path = "./imagetest/123/".$file; 

或者干脆...

$remote_file_path = "imagetest/123/".$file; 

试试这个...

$uploaddir = "./temp/"; 
$uploadfile = $uploaddir . basename($_FILES['uploadedfile_1']['name']); 

echo '<pre>'; 
if (move_uploaded_file($_FILES['uploadedfile_1']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Possible file upload attack!\n"; 
} 
+0

尝试不工作,... – Redsun 2014-10-09 07:35:11

+0

尝试更新的代码... – 2014-10-09 10:17:32

0

$_FILES["uploadedfile_1"]["tmp_name"]仅仅是一个临时文件名字符串(如 'aaaaa.jpg' 但不'/tmp/upload/aaa.jpg')。您应该使用move_uploaded_file移动使用表格上传的文件,因为$_FILES["uploadedfile_1"]["tmp_name"]不包含实际的文件路径。 http://php.net/manual/en/function.move-uploaded-file.php

由于我还没有经验将上传的文件直接移动到另一台服务器,我想这是什么工作。 1.首先将上传的文件移动到本地文件夹。

$localPath = '/xxxx/upload/' //confirm your web server user have the right to write in this folder 
$tmp_name = $_FILES["uploadedfile_1"]["tmp_name"] // confirm you got a filename here. 
move_uploaded_file($tmp_name, "$localPath/$tmp_name"); // You should have a new file in /xxxx/upload/ 

在您的网络服务器上。

2.然后将文件从本地文件夹移动到远程服务器。

ftp_put($conn_id, $remote_file_path, "$localPath/$tmp_name" ,FTP_ASCII);// If this goes wrong, you should test this with a local file created mannually and upload it to your remote server. If it fails, there must be something wrong in your remote connection or permission. 

3.然后删除本地文件夹中的文件。

unlink("$localPath/$tmp_name");// The file in local host should be deleted. 

请给它一个镜头。

+0

'bool move_uploaded_file(string $ filename,string $ destination )'如何替换这个'ftp_put($ conn_id,$ remote_file_path,$ _FILES [“uploadedfile_1”] [“tmp_name”],FTP_ASCII);' – Redsun 2014-10-09 07:51:30

+0

@Redsun不幸的是我没有经验将上传文件直接移动到另一个,但这里我认为会发挥什么作用。首先将上传的文件移动到本地文件夹。然后将文件从本地文件夹移到远程服务器。然后删除本地文件夹中的文件。我正在编辑我的答案,你应该在几分钟内看到更改。 – kyo 2014-10-09 08:54:03

0

首先,确保文件的路径很好(语法上,实际上指向启动的文件),其次,函数返回boolean。你可以检查它的价值,看看上传是否成功发生。

我认为这种情况下的另一个问题可能是服务器的防火墙阻碍了在客户端(即您)和服务器之间建立数据通道。上传文件之前,请尝试启用passive mode。只需ftp_put之前添加以下行,看看它的工作原理:

// turn passive mode on 
ftp_pasv($conn_id, true); 

$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); 

你也必须使用二进制模式,用于图像作为正确地指出。

Relevantdocumentation。希望它能让你从正确的方向开始。

+0

没有运气。它不工作 – Redsun 2014-10-09 07:42:17

+0

你确定你可以连接到FTP服务器?你是否有任何具体的错误? – 2014-10-09 07:45:04

+0

雅我肯定没有错误,... – Redsun 2014-10-09 07:49:20