ftp_fput

(PHP 4, PHP 5, PHP 7, PHP 8)

ftp_fputCarga un fichero en un servidor FTP

Descripción

ftp_fput(
    FTP\Connection $ftp,
    string $remote_filename,
    resource $stream,
    int $mode = FTP_BINARY,
    int $offset = 0
): bool

ftp_fput() carga los datos del fichero identificado por stream hasta el final del fichero.

Parámetros

ftp

An FTP\Connection instance.

remote_filename

La ruta hacia el fichero remoto.

stream

Un puntero de fichero abierto sobre el fichero local. La lectura se detiene al final del fichero.

mode

El modo de transferencia. Debe ser FTP_ASCII o FTP_BINARY.

offset

La posición en el fichero remoto a partir de la cual comenzará la carga.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
8.1.0 The ftp parameter expects an FTP\Connection instance now; previously, a recurso was expected.
7.3.0 El argumento mode es ahora opcional. Anteriormente era obligatorio.

Ejemplos

Ejemplo #1 Ejemplo con ftp_fput()

<?php

// Apertura de algunos ficheros para lectura
$file = 'somefile.txt';
$fp = fopen($file, 'r');

// Establecimiento de una conexión básica
$ftp = ftp_connect($ftp_server);

// Identificación con un nombre de usuario y una contraseña
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// Intento de cargar el fichero $file
if (ftp_fput($ftp, $file, $fp, FTP_ASCII)) {
echo
"Carga exitosa del fichero $file\n";
} else {
echo
"Hubo un problema durante la carga del fichero $file\n";
}

// Cierre de la conexión y del puntero de fichero
ftp_close($ftp);
fclose($fp);

?>

Ver también

  • ftp_put() - Carga un fichero en un servidor FTP
  • ftp_nb_fput() - Escribe un fichero en un servidor FTP, y lo lee desde un fichero (no bloqueante)
  • ftp_nb_put() - Envía un fichero a un servidor FTP (no bloqueante)

add a note

User Contributed Notes 10 notes

up
28
roy at user dot nl
12 years ago
For directly inserting content into a file on an FTP host, you could also create a string stream wich streams directly to the ftp_fput function.

This should create less overhead than first writing to any temp directories locally before streaming, as suggested here.

<?php

$string
= "Your content goes here";
$stream = fopen('data://text/plain,' . $string,'r');

ftp_fput($this->connection,$pathTo,$stream, FTP_BINARY);

?>
up
7
timgolding_10 at hotmail dot com
16 years ago
If when using fput you get the one of the following errors:

Warning: ftp_fput() [function.ftp-fput]: Opening ASCII mode data connection

Warning: ftp_fput() [function.ftp-fput]: Opening BINARY mode data connection

and it creates the file in the correct location but is a 0kb file and all FTP commands thereafter fail. It is likely that the client is behind a firewall. To rectify this use:

<?php
ftp_pasv
($resource, true);
?>

Before executing any put commands. Took me so long to figure this out I actually cheered when I did :D
up
3
jopi paranoid fi
17 years ago
When you have your file contents as a string, create temporary stream and use that as a file handle.

<?php

$contents
= "This is a test file\nTesting 1,2,3..";

$tempHandle = fopen('php://temp', 'r+');
fwrite($tempHandle, $contents);
rewind($tempHandle);

ftp_fput($this->ftp, $filename, $tempHandle, FTP_ASCII);

?>
up
1
rok dot meglic at gmail dot com
16 years ago
Make sure you chdir to remote directory before using ftp_put or else ftp_put will just return error that it cannot create file. After you do the chdir you should NOT pass the whole path of file to ftp_put but just basename (filename). See example for more info.

Example:
<?php
$locpath
= 'local_path/resources/js/test.js';
$rempath = 'resources/js/';
$remFile = 'test.js';

ftp_chdir($this->conn_id, $rempath);
ftp_put($this->conn_id, $remFile, $locpath, FTP_BINARY);
?>
up
0
php at cpis dot me
13 years ago
This might be obvious to most of you, but make sure your stream isn't write-only. It has to be able to read from your stream in order to upload its contents.

Took me a while trying to figure out why my uploaded file was 0B, and that was why.
up
0
jevin
13 years ago
You might also want to note that ftp_fput will overwrite any existing file.
up
0
robert b
16 years ago
Using jopi paranoid fi's example, tmpfile() works on PHP 4 and 5 instead of using the php://temp file.
up
0
Charlie Brown
17 years ago
Fails if destination file exists. Delete first and it works.
up
0
info at daniel-marschall dot de
19 years ago
This is a function i wrote to copy a complete directory to a FTP-Server-folder.

function ftp_uploaddirectory($conn_id, $local_dir, $remote_dir)
{
@ftp_mkdir($conn_id, $remote_dir);
$handle = opendir($local_dir);
while (($file = readdir($handle)) !== false)
{
if (($file != '.') && ($file != '..'))
{
if (is_dir($local_dir.$file))
{
ftp_uploaddirectory($conn_id, $local_dir.$file.'/', $remote_dir.$file.'/');
}
else
$f[] = $file;
}
}
closedir($handle);
if (count($f))
{
sort($f);
@ftp_chdir($conn_id, $remote_dir);
foreach ($f as $files)
{
$from = @fopen("$local_dir$files", 'r');
@ftp_fput($conn_id, $files, $from, FTP_BINARY);
}
}
}

Example:

$conn_id = @ftp_connect($server);
@ftp_login ($conn_id, $username, $passwort);
ftp_uploaddirectory($conn_id, 'mydirectory/', 'theftpdirectory/');
@ftp_quit($conn_id);

I hope you'll find it useful.
up
-3
darian lassan at yahoo de
22 years ago
If you want to pass a string containing the filename as source and not a resource handle use ftp_put() instead. Trivial but not mentioned here.
To Top