Как загрузить файл через FTP в PHP? - PullRequest
2 голосов
/ 17 августа 2010

У меня есть форма с типом просмотра 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 ]

3 голосов
/ 13 марта 2015

Попробуйте это:

$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

2 голосов
/ 17 августа 2010

Пример HTML-кода с enctype:

<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 голосов
/ 17 августа 2010
$_FILES['tmp_name'] 

не является именем вашего файла.Он хранится в:

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

, где inputname - это имя вашего поля.Также проверьте свою форму на enctype = "multipart / form-data".

Будьте внимательны, просто размещая на своем сервере все, что может отправлять пользователь - если есть доступ к загруженным файлам по http (например, http://yoursite/images/signatures/uploadedfile.xxx) кто-то может поместить файлы .php на ваш сервер и запустить его!

1 голос
/ 17 августа 2010

Очевидно, что $ _FILES ['tmp_name'] не содержит имя файла.Попробуйте print_r($_FILES), чтобы увидеть, что в нем содержится.Кроме того, используйте multipart / form-data в качестве типа формы.

...