Gestire i caricamenti di file
PHP Manual

Supporto per metodo PUT

PHP fornisce supporto per il metodo HTTP PUT utilizzato da alcuni client per caricare i file sul server. Le richieste PUT sono molto più semplici rispetto al caricamento di un file attraverso POST, e assomigliano a

PUT /percorso/nomefile.html HTTP/1.1

Questo significa che normalmente il programma remoto intende salvare il contenuto della richesta come : /path/filename.html nel filesystem sul server web. Non è ovviamente una buona idea per Apache o PHP lasciare a un qualsiasi utente la possibilità di sovrascrivere file sul server web. Quindi, per gestire questa richiesta si deve chiedere al server web che si vuole che sia un certo script PHP a gestire la richiesta stessa. In Apache si ottiene questo con la direttiva Script. Può essere posta quasi ovunque nel file di configurazione di Apache. Un posto frequente è all'interno di un blocco <Directory> oppurte all'interno del blocco <Virtualhost>. Un linea come la seguente è sufficiente:

Script PUT /put.php

Questo chiede ad Apache di inviare tutte le richieste PUT che soddisfano il contesto in cui si è inserito questo comando allo script put.php. Questo richiede, naturalmente, che sia abilitato PHP per l'estensione .php e che PHP sia attivo. La risorsa di destinazione per tutte le richieste PUT verso questo script deve essere lo script stesso, non in nome di file che si desidera caricare.

All'interno del file put.php si può inserire qualcosa simile al seguente esempio. Questo copia il contenuto del file caricato verso il file myputfile.ext sul server. È consigliabile attuare dei controlli e/o autenticare l'utilizzatore prima di eseguire la copia del file.

Example #1 Registrare i file ricevuti con HTTP PUT

<?php
/* i dati PUT arrivano sull stream stdin */
$putdata fopen("php://input""r");

/* Apre il file in scrittura */
$fp fopen("myputfile.ext""w");

/* Legge i dati 1 KB alla volta
   e scrive sul file */
while ($data fread($putdata1024))
  
fwrite($fp$data);

/* Chiude gli stream */
fclose($fp);
fclose($putdata);
?>


Gestire i caricamenti di file
PHP Manual