Posts filed under 'PHP'

Forzare un download anche su IE

Molti sanno che è possibile, grazie ad un corretto uso degli headers, forzare il download di un file. Questo significa che è possibile ad esempio linkare un’immagine JPG facendo in modo che essa non si apra ma al suo posto compaia la finestra “Salva con nome…”.

Internet Explorer naturalmente complica le cose! Gli piace molto aggiungere al nome del file parentesi sia tonde che quadre, nonchè convertire caratteri vari, con comprensibile sgomento di utenti e sviluppatori. In particolare, spazi e punti nel nome del file provocano questi strani comportamenti, tanto che tempo fa partecipai sul forum su PHP di HTML.it alla realizzazione di una pillola sul tema.

Il frutto della discussione fu questa funzione:

function forceDownload($file) {
	/**
	 * Function forceDownload:
	 *	download any type of file if it exists and is readable
	 * -------------------------------------
	 * @author		Andrea Giammarchi
	 * @date		18/01/2005 [17/05/2006]
	 * @compatibility	PHP >= 4.3.0
	 */
	if(file_exists($file) && is_readable($file)) {
		$filename = basename($file);
		if(strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), 'MSIE') !== false && strpos($filename, '.') !== false) {
			$parsename = explode('.', $filename);
			$last = count($parsename) - 1;
			$filename = implode('%2E', array_slice($parsename, 0, $last));
			$filename .= '.'.$parsename[$last];
		}
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename="'.$filename.'"');
		header('Content-Length:'.filesize($file));
		header('Content-Transfer-Encoding: binary');
		if(@$file = fopen($file, "rb")) {
			while(!feof($file))
				echo fread($file, 8192);
			fclose($file);
		}
		exit(0);
	}
}

Fonte: http://www.devpro.it/php4_id_72.html

Add comment 5 Marzo 2008

Andare a capo a metà parola

Capita spesso di creare in HTML tabelle o schemi che devono stare in poco spazio. Si sarebbe disposti anche ad andare a capo interrompendo una parola, ma attualmente CSS e HTML non ci vengono molto incontro. Ecco una soluzione in PHP, facilmente traducibile in JavaScript, testata su IE e Firefox:

function hardWordWrap($q){
	$result="";
	for($i=0;$i<strlen($q);$i++){
		if (isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)){
			$result.=$q[$i].'';
		}else{
			$result.=$q[$i].'&'.'#8203;';
		}
	}
	return $result;
}

Add comment 16 Ottobre 2007


Mephit

Mephit logo
PHP project for D&D players www.mephit.it

Documentazione

Motori di ricerca

Utility

Categorie

Meta

Archivi