Tra gli ultimi articoli

Scaricare un file con Php tramite wget e parametri

phpwget è il comando utilizzato per scaricare file attraverso la shell linux, questo comando non è presente in windows perciò le informazioni sottostanti sono esclusive di scripts che girano su macchine linux.

wget è fruibile in Php tramite l’esecutore di comandi di shell denominato come shell_exec. Il suo funzionamento è piuttosto semplice, all’interno della shell_exec messa a disposizione su Php, inseriamo il comando wget con il link del file che vogliamo scaricare. Ecco un rapido esempio:

shell_exec("wget 'http://example.org/file.rar'");

Nell’esempio sopra scarichieremo il file chiamato file.rar dal dominio example.org. Ovviamente possiamo anche scaricare utilizzando tutti gli altri parametri che wget ci mette a disposizione. Per vedere tutti i parametri di wget dovremmo aprire la shell e digitare wget –help, si aprirà una guida con tanto di sintassi di esempio.

Per comodità possiamo inserire anche variabili all’interno di shell_exec.

$link_file = 'http://example.org/file.rar';
shell_exec("wget $link_file");

Richiedere un file tramite chiamata GET php.

Mi sono imbattuto tempo fa in un problema all’apparenza banale ma che inizialmente non riuscivo a capire quale fosse. Mettiamo un esempio, avendo il link http://example.org/get.php?filename=video.mp4 ed inserendolo in wget non avremo problemi a scaricare il file video.mp4

Il problema nasce quando vogliamo inserire più di un parametro ed utilizziamo nel link GET questo carattere: &. Avendo per esempio questo link: http://example.org/get.php?filename=video.mp4&filesize=50 il nostro wget leggerà il dato finchè non incontra il carattere &, rendendo nulli i valori di seguito ad esso.

Per ovviare a questo problema dobbiamo modificare il link, aggiungendo il carattere di escape \ prima di & in questo modo:

$link1 = "http://example.org/get.php?filename=video.mp4&filesize=50" //Errato, non invia &filesize=50
$link2 = "http://example.org/get.php?filename=video.mp4\&filesize=50" // Corretto
shell_exec("wget $link1"); // Potrebbe non scaricare o scaricare dati incompleti.
shell_exec("wget $link2"); //Funziona correttamente.

Questo avviene perchè linux vede il carattere & come un unione di comandi, perciò da shell il comando wget viene interrotto e il sistema cerca nuovi comandi che non trova.

Scaricare un file modificandone il nome o il percorso.

Per scaricare un file e rinominarlo di nome ci basterà utilizzare wget in questo modo:

$destinazione = '/var/www/file_scaricati/mio_nuovo_file.rar';
$origine = 'http://example.org/file.rar';
exec("wget -O $destinazione $origine");

in questo modo wget scaricherà il file, mettendolo nella directory /var/www/file_scaricati/ e rinominandolo in mio_nuovo_file.rar.

 

About Stefano Berardi

Stefano Berardi
''non sono superman... I'm not superman..."