oriolrius.cat

Des del 2000 compartiendo sobre…

Fer un FTP des del PHP

Reading time: 4 – 6 minutes

Això no és cap manual de com fer un FTP des del PHP, com
sembla pel titol. Per això ja hi ha la web de PHP, on podeu buscar informació sobre la
funció ftp_put (es) per exemple.

El que vull explicar és com funciona internament la funcion ftp_put
perquè no queda gens clar al manual del PHP ni a cap forum d’ajuda.
Perquè és tan important saber això? doncs perquè
sinó els exemples que hi ha a les web de PHP o dels forums no funcionen
ni a la de tres.

Centraré tota l’explicació en base a l’exemple de la web. A la web hi ha dos trossos de codi un .html i .php, el primer mostra el formulari per pujar el fitxer i el segon el codi que fa el ftp per pujar el fitxer:

<html>

<body marginwidth=4 marginheight=4 topmargin=4 leftmargin=4 bgcolor=white vlink="#0000ff" link="#0000ff">

<form name="Attachments" method=POST action="sendimage.php" enctype="multipart/form-data">

<input type=hidden name=box value="">

<tr> <td nowrap width="1%">&nbsp;&nbsp;<b>Image:</b></td> <td colspan=2>

<input type=file name=source_file size=20> <br>

</td> </tr> <input type=submit name=btnSubmit value=Submit size=20 style="border: 1px solid #0000FF"></form>

</body> </html>

D’aquest codi és important fixar-se, a part del que ja explica la web, que el camp d’input és de tipus ‘file’ i li posem de nom a aquest camp: ‘source_file’. Seria normal pensar que el tipus ‘file’ és equivalent a una cadena (string), però no és així sinó que és una taula (array). Aquí teniu un exemple de valor que pot agafar la taula de tipus ‘file’ anomenada $sourcefile:

Array
(
    [name] => foto.jpg
    [type] => image/jpeg
    [tmp_name] => /tmp/phpFpMtnb
    [error] => 0
    [size] => 44050
)

D’aquí és important adonar-se que “name” conté el nom del fitxer al ‘site origen’, el tipus conté el tipus de fitxer que s’esta pujant segons MIME, “tmp_name” (molt important) conté el nom del fitxer temporal, amb el que es guarda el nostre fitxer al servidor de PHP. Aquest fitxer és molt important perquè és el fitxer que realment es pujarà per FTP al site destí.

De fet, sembla extrany però si ens ho pensem bé és obvi. Perquè el PHP no pot fer un ftp des del nostre directori origen, ja que és codi que s’executa al servidor. Per tant, quan el PHP vulgui fer un FTP només ho podrà fer de fitxers que hi hagi al servidor i no al nostre PC. Suposo que ara queda clar, el perquè.

Al camp “errors” de la taula es guarda el codi d’error que retorna la funció ftp_put al fer l’ftp. Per últim “size” ens indica la mida del fitxer.

El codi de sendimage.php que és el fitxer que crida l’anterior formulari és el següent:

Hem de capturar l'array del form
$source_file=$_FILES["source_file"];

$ftp_server='example.com';//serverip $conn_id = ftp_connect($ftp_server);

// login with username and password $user="user"; $passwd="password"; $login_result = ftp_login($conn_id, $user, $passwd);

// check connection if ((!$conn_id) || (!$login_result)) { echo "FTP connection has failed!"; echo "Attempted to connect to $ftp_server for user $ftp_user_name"; die; } else { echo "
Connected to $ftp_server, for user $user
"; }

// Posem el mateix nom de destí que d'origen $destination_file=basename($source_file["name"]); echo ("
"); print $destination_file;

echo ("
");

// Pugem el fitxer temporal tal com hem explicat abans $upload = ftp_put($conn_id, $destination_file, $source_file["tmp_name"], FTP_BINARY);

// check upload status if (!$upload) { echo "FTP upload has failed!"; } else { echo "Uploaded $source_file["name"] to $ftp_server as $destination_file"; }

// close the FTP stream ftp_close($conn_id); ?>

D’aquest codi és important fixar-se en dos coses:

1) a la primera línia capturem la taula (array) de tipus ‘file’ que ens envia el formulari, aquesta taula (array) com ja hem dit és el que conté la informació del fitxer a enviar.

2) la línia del ftp_put, cal fixar-se que com a fitxer origen passem el camp ‘tmp_file’ del array de tipus ‘file’ anomenat ‘source_file’.

Suposo que la resta del codi és molt clar, si no és així ja sabeu que heu de fer: preguntar.

Últimas entradas

Resumen 2023

Reading time: 14 – 22 minutes El 2023 comenzó con una sensación de renovación y optimismo. Tras un período marcado por la pandemia, este año se presentó como un lienzo en blanco, lleno de posibilidades y nuevas experiencias. Aunque el

Leer más »
Archivo