PHP: evitare errori quando si implementa il download dei file

PHP: evitare errori quando si implementa il download dei file

Per evitare errori nel download dei file con PHP occorre procedere per step.

Ipotizziamo di voler consentire il download di file PDF. Avremo:


if( isset( $_GET['pdf'] ) ) {
	$pdf_base_url = 'https://sito.com/uploads/pdf/';
	$pdf_base_path = $_SERVER['DOCUMENT_ROOT'] . '/uploads/pdf/';
	$pdf = trim( $_GET['pdf'] );
	$pdf_full_url = $pdf_base_url . $pdf;
	$pdf_full_path = $pdf_base_path . $pdf;
	if( preg_match( '/\.pdf$/', $pdf ) ) { // 1
	  if( file_exists( $pdf_full_path ) ) { // 2 
		$finfo = finfo_open( FILEINFO_MIME_TYPE ); // 3
		$mimetype = finfo_file( $finfo, $pdf_full_path );
		finfo_close( $finfo );
		if( $mimetype == 'application/pdf' ) {
			header( 'Content-type: application/pdf' );
			header( 'Content-Disposition: attachment; filename="' . $pdf . '"' );
			readfile( $pdf_full_url );
		}
	  }
	}
}

  1. Verifica di base. Il file richiesto ha l'estensione attesa?
  2. Verifica intermedia. Il file richiesto esiste?
  3. Verifica finale. Il file richiesto possiede il contenuto MIME atteso?

Il terzo step è una verifica di integrità finale. Dobbiamo essere sicuri che il file richiesto sia effettivamente un file PDF e non ad esempio un file PHP come è avvenuto in passato con il plugin WordPress di Revolution Slider.

Torna su