我尝试过在php中使用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>
上传.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 $ftp_username@$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";
?>
try。。
$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";
}
首先,确保文件的路径是正确的(语法上并且实际指向initend文件),其次,ftp_put
函数返回一个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);
你还必须使用二进制模式的图像正确指出。
相关文件。希望它能让你朝着正确的方向开始。
$_FILES["uploadedfile_1"]["tmp_name"]
只是一个具有临时文件名的字符串(例如"aaaaa.jpg",但不是"/tmp/upload/aa.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/
在您的Web服务器中。
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.
请试一试。