diff --git a/ecrire/action/charger_plugin.php b/ecrire/action/charger_plugin.php
index 8b881be964128d8cba55045f3e8530ee99ceabaa..ee0aecf462a8ff8bf2085be5ea4946ab2c738b13 100644
--- a/ecrire/action/charger_plugin.php
+++ b/ecrire/action/charger_plugin.php
@@ -96,7 +96,7 @@ function action_charger_plugin_dist() {
 			)
 		);
 		if (_request('extract')) {
-			@unlink($fichier);
+			spip_unlink($fichier);
 		}
 	}
 
diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php
index 85289908538ea87d9cb3af3ca022599df486595a..11837d13cdb3a420cda7eb15d8e73fd483b8e742 100644
--- a/ecrire/action/editer_site.php
+++ b/ecrire/action/editer_site.php
@@ -339,7 +339,7 @@ function analyser_site($url) {
 				$result['logo'] = $image['fichier'];
 			}
 			else if ($image['fichier']) {
-				@unlink($image['fichier']);
+				spip_unlink($image['fichier']);
 			}
 		}
 	}
diff --git a/ecrire/action/iconifier.php b/ecrire/action/iconifier.php
index 867a25aa5ea7b42eb2c1865ad2f8af0873606815..df15a86dc8b715f849e789e76d59e8c1f3ffd675 100644
--- a/ecrire/action/iconifier.php
+++ b/ecrire/action/iconifier.php
@@ -38,7 +38,7 @@ function action_iconifier_dist()
 function action_spip_image_effacer_dist($arg) {
 
 	if (!strstr($arg, ".."))
-		@unlink(_DIR_LOGOS . $arg);
+		spip_unlink(_DIR_LOGOS . $arg);
 }
 
 //
@@ -83,7 +83,7 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 
 			if (_LOGO_MAX_SIZE > 0
 			AND $poids > _LOGO_MAX_SIZE*1024) {
-				@unlink ($f);
+				spip_unlink ($f);
 				check_upload_error(6,
 				_T('info_logo_max_poids',
 					array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024),
@@ -93,7 +93,7 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 			if (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT
 			AND ($size[0] > _LOGO_MAX_WIDTH
 			OR $size[1] > _LOGO_MAX_HEIGHT)) {
-				@unlink ($f);
+				spip_unlink ($f);
 				check_upload_error(6, 
 				_T('info_logo_max_taille',
 					array(
@@ -110,7 +110,7 @@ function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
 			@rename ($f, _DIR_LOGOS . $arg . ".$type");
 		}
 		else {
-			@unlink ($f);
+			spip_unlink ($f);
 			check_upload_error(6,_T('info_logo_format_interdit',
 						array('formats' => join(', ', $formats_logos))));
 		}
diff --git a/ecrire/action/joindre.php b/ecrire/action/joindre.php
index 451925831a772b7e528f2b43c590215d06fb5a96..4990f83df7fc208b56c076091f5579b0e94f70a8 100644
--- a/ecrire/action/joindre.php
+++ b/ecrire/action/joindre.php
@@ -223,7 +223,7 @@ function inc_joindre6_dist($path, $mode, $type, $id, $id_document,$hash, $redire
 {
 	$x = joindre_deballes($path, $mode, $type, $id, $id_document,$hash, $redirect, $actifs);
 	//  suppression de l'archive en zip
-	@unlink($path);
+	spip_unlink($path);
 	return $x;
 }
 
diff --git a/ecrire/action/purger.php b/ecrire/action/purger.php
index 78c646b91c503cfcffbf0cbc0f6291d347302f17..d94898937cecf53f9322d67d43418350f277c194 100644
--- a/ecrire/action/purger.php
+++ b/ecrire/action/purger.php
@@ -32,7 +32,7 @@ function action_purger_dist()
 
 	case 'cache': 
 		supprime_invalideurs();
-		@unlink(_CACHE_RUBRIQUES);
+		spip_unlink(_CACHE_RUBRIQUES);
 		purger_repertoire(_DIR_CACHE);
 		break;
 
diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php
index 678ff23d72b648dd91e25a1df580fa38c2a30e7d..2c6e23322deba6de5f2681b11cc8f740acb53213 100644
--- a/ecrire/action/supprimer.php
+++ b/ecrire/action/supprimer.php
@@ -78,7 +78,7 @@ function supprimer_document_et_vignette($arg)
 {
 	$result = spip_query("SELECT id_vignette, fichier FROM spip_documents WHERE id_document=$arg");
 	if ($row = spip_abstract_fetch($result)) {
-		@unlink(get_spip_doc($row['fichier']));
+		spip_unlink(get_spip_doc($row['fichier']));
 		spip_query("DELETE FROM spip_documents WHERE id_document=$arg");
 		spip_query("UPDATE spip_documents SET id_vignette=0 WHERE id_vignette=$arg");
 		spip_query("DELETE FROM spip_documents_articles WHERE id_document=$arg");
@@ -89,7 +89,7 @@ function supprimer_document_et_vignette($arg)
 			$result = spip_query("SELECT fichier FROM spip_documents	WHERE id_document=$id_vignette");
 
 			if ($row = spip_abstract_fetch($result)) {
-				@unlink(get_spip_doc($row['fichier']));
+				spip_unlink(get_spip_doc($row['fichier']));
 			}
 			spip_query("DELETE FROM spip_documents	WHERE id_document=$id_vignette");
 			spip_query("DELETE FROM spip_documents_articles	WHERE id_document=$id_vignette");
diff --git a/ecrire/action/tester_taille.php b/ecrire/action/tester_taille.php
index 5e08f826e199fb255fdbd172955c2346bfb7af7b..77cf9c9b4c5d41d69283fc02c484db2d3171d128 100644
--- a/ecrire/action/tester_taille.php
+++ b/ecrire/action/tester_taille.php
@@ -67,7 +67,7 @@ function action_tester_taille_dist() {
 		if ($src) {
 			ecrire_meta('max_taille_vignettes',$taille*$taille,'non');
 			ecrire_metas();
-			@unlink($src);
+			spip_unlink($src);
 		}
 		else {
 			if (!$max_size_echec OR $s < $max_size_echec)
diff --git a/ecrire/action/tourner.php b/ecrire/action/tourner.php
index 52a9e7d9190453cb35f76d613a055605aa85ac33..7119d2807a23f8514ad29e56f91516d7549c317d 100644
--- a/ecrire/action/tourner.php
+++ b/ecrire/action/tourner.php
@@ -96,7 +96,7 @@ function action_tourner_post($r)
 		spip_query("UPDATE spip_documents SET fichier=$f, largeur=$largeur, hauteur=$hauteur WHERE id_document=$arg");
 		if ($effacer) {
 			spip_log("j'efface $effacer");
-			@unlink($effacer);
+			spip_unlink($effacer);
 		}
 	}
 
diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php
index ad786fee54dcc24b571dd698cbdc5eabc1a02119..04a0fdea1aaa4c83f241102d490b0b7df91debb0 100644
--- a/ecrire/balise/formulaire_forum.php
+++ b/ecrire/balise/formulaire_forum.php
@@ -301,7 +301,7 @@ function forum_fichier_tmp($arg)
 		while (($file = @readdir($dh)) !== false)
 			if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
 			AND (time()-@filemtime(_DIR_TMP.$file) > 4*3600))
-				@unlink(_DIR_TMP.$file);
+				spip_unlink(_DIR_TMP.$file);
 	return $alea;
 }
 ?>
diff --git a/ecrire/base/convert_utf8.php b/ecrire/base/convert_utf8.php
index ba3469e74fc984e39d08ef652c9417dc8ecf84f8..474585ebe9cff94dec6b5999be0041e783778027 100644
--- a/ecrire/base/convert_utf8.php
+++ b/ecrire/base/convert_utf8.php
@@ -24,7 +24,7 @@ function convert_utf8_init($tables_a_convertir)
 		spip_query("UPDATE $table SET $champ = CONCAT('<CONVERT ".$charset_source.">', $champ)	WHERE $champ NOT LIKE '<CONVERT %'");
 	}
 
-	@unlink(_DIR_TMP.'convert_utf8_backup.sql');
+	spip_unlink(_DIR_TMP.'convert_utf8_backup.sql');
 
 	// convertir spip_meta
 
diff --git a/ecrire/base/delete_all.php b/ecrire/base/delete_all.php
index f2e1437086a556e75b100417a44ea033a76f04c9..db8f8bee8f2bfcbe0d1366acddb31d62d98b0518 100644
--- a/ecrire/base/delete_all.php
+++ b/ecrire/base/delete_all.php
@@ -68,8 +68,8 @@ function base_delete_all_dist($titre)
 	// un pipeline pour detruire les tables installees par les plugins
 	pipeline('delete_tables', '');
 
-	@unlink(_ACCESS_FILE_NAME);
-	@unlink(_FILE_CONNECT);
+	spip_unlink(_ACCESS_FILE_NAME);
+	spip_unlink(_FILE_CONNECT);
 	spip_log("destruction operee redirige vers " . _request('redirect'));
 }
 ?>
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index 1788b7ecf1e653ccbe825ae0b8b4f1852ac7008e..6b84f29def8bd3a90c8223008d48efea5948634f 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -676,9 +676,9 @@ function maj_base($version_cible = 0) {
 
 	if (upgrade_vers(1.603, $version_installee, $version_cible)) {
 		// supprimer les fichiers deplaces
-		@unlink('inc_meta_cache.php');
-		@unlink('inc_meta_cache.php3');
-		@unlink('data/engines-list.ini');
+		spip_unlink('inc_meta_cache.php');
+		spip_unlink('inc_meta_cache.php3');
+		spip_unlink('data/engines-list.ini');
 		maj_version (1.603);
 	}
 
diff --git a/ecrire/cron/visites.php b/ecrire/cron/visites.php
index 25f70f6e0fc42878319f83fbfeb5376438c13add..518647fd5f6e1102fa17a4a94be53a21b5e46043 100644
--- a/ecrire/cron/visites.php
+++ b/ecrire/cron/visites.php
@@ -77,7 +77,7 @@ function calculer_visites($t) {
 			spip_log("traite la session $item");
 			compte_fichier_visite($item,
 				$visites, $visites_a, $referers, $referers_a, $articles);
-			@unlink($item);
+			spip_unlink($item);
 			if (--$compteur <= 0)
 				break;
 		}
diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php
index 486600e0bfef83b05b05fe2369f8244bc8e72053..3e4212071273aaf9b368d5add4bbcc06c4e47e57 100644
--- a/ecrire/exec/export_all.php
+++ b/ecrire/exec/export_all.php
@@ -55,7 +55,7 @@ function exec_export_all_dist()
 		$l = preg_files($file .  ".part_[0-9]+_[0-9]+");
 		if ($l) {
 			spip_log("menage d'une sauvegarde inachevee: " . join(',', $l));
-			foreach($l as $dummy)@unlink($dummy);
+			foreach($l as $dummy)spip_unlink($dummy);
 		}
 		$start = true; //  utilise pour faire un premier hit moitie moins long
 		$tables_sauvegardees = array();
diff --git a/ecrire/exec/install.php b/ecrire/exec/install.php
index c4327ff961b60da9d9c8cfa4071d30f36024d303..e558f3da62ac745c68af5f06d45753279cbb0c88 100644
--- a/ecrire/exec/install.php
+++ b/ecrire/exec/install.php
@@ -28,7 +28,7 @@ function exec_install_dist()
 
 	// On va supprimer les eventuelles vieilles valeurs de meta,
 	// on perd l'init des langues, mais elle est refaite par menu_langue
-	@unlink(_FILE_META);
+	spip_unlink(_FILE_META);
 	$GLOBALS['meta'] = array();
 	include_spip('base/create');
 	$fonc = charger_fonction("etape_$etape", 'install');
diff --git a/ecrire/inc/acces.php b/ecrire/inc/acces.php
index afcf7431b3565749883318e6710f41ed5c8a4762..5f304a2e78a19f0d09ba8c35aa5b4c79bf51e91d 100644
--- a/ecrire/inc/acces.php
+++ b/ecrire/inc/acces.php
@@ -142,8 +142,8 @@ function ecrire_acces() {
 	// si .htaccess existe, outrepasser spip_meta
 	if (($GLOBALS['meta']['creer_htpasswd'] != 'oui')
 	AND !@file_exists($htaccess)) {
-		@unlink($htpasswd);
-		@unlink($htpasswd."-admin");
+		spip_unlink($htpasswd);
+		spip_unlink($htpasswd."-admin");
 		return;
 	}
 
@@ -214,7 +214,7 @@ function gerer_htaccess() {
 		if (is_dir($dir = _DIR_IMG . $e['extension'])) {
 			if ($GLOBALS['meta']['creer_htaccess'] == 'oui')
 				verifier_htaccess($dir);
-			else @unlink("$dir/" . _ACCESS_FILE_NAME);
+			else spip_unlink("$dir/" . _ACCESS_FILE_NAME);
 		}
 	}
 	return $GLOBALS['meta']['creer_htaccess'];
diff --git a/ecrire/inc/admin.php b/ecrire/inc/admin.php
index 6305e3ea1de7c11fed0973ee57b14e2b7b3e3b8d..d3604ad7462e159fc8c45c6970968e01fb72ccb4 100644
--- a/ecrire/inc/admin.php
+++ b/ecrire/inc/admin.php
@@ -34,7 +34,7 @@ function inc_admin_dist($script, $titre, $comment='', $retour='')
 	$base($titre,$reprise);
 	effacer_meta($script);
 	ecrire_metas();
-	@unlink(_FILE_META);
+	spip_unlink(_FILE_META);
 	fin_admin($script);
 	spip_log("efface meta: $script " . ($retour ? $retour : ''));
 	if ($retour) redirige_par_entete($retour);
@@ -123,7 +123,7 @@ function debut_admin($script, $action='', $commentaire='') {
 // http://doc.spip.org/@fin_admin
 function fin_admin($action) {
 	$signal = dir_admin() . fichier_admin($action);
-	@unlink($signal);
+	spip_unlink($signal);
 	@rmdir($signal);
 }
 
diff --git a/ecrire/inc/ajouter_documents.php b/ecrire/inc/ajouter_documents.php
index 91e839d3405249b0b49f1cad85724e9c182fd0d4..257ac730f56215a8998279acc6710f617b9973d0 100644
--- a/ecrire/inc/ajouter_documents.php
+++ b/ecrire/inc/ajouter_documents.php
@@ -102,7 +102,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 				return;
 			}
 			if (!$tmp_dir = tempnam(_DIR_TMP, 'tmp_upload')) return;
-			@unlink($tmp_dir); @mkdir($tmp_dir);
+			spip_unlink($tmp_dir); @mkdir($tmp_dir);
 			$tmp = $tmp_dir.'/'.translitteration($nom_envoye);
 			$nom_envoye .= '.zip'; # conserver l'extension dans le nom de fichier, par exemple toto.js => toto.js.zip
 			deplacer_fichier_upload($source, $tmp);
@@ -118,7 +118,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 				return;
 			}
 			$fichier = copier_document($ext, $nom_envoye, $source);
-			@unlink($source);
+			spip_unlink($source);
 
 		} else $fichier = copier_document($ext, $nom_envoye, $source);
 
@@ -157,7 +157,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		if (!$type_image) {
 			if (_DOC_MAX_SIZE > 0
 			AND $taille > _DOC_MAX_SIZE*1024) {
-				@unlink ($fichier);
+				spip_unlink ($fichier);
 				check_upload_error(6,
 				_T('info_logo_max_poids',
 					array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024),
@@ -167,7 +167,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		else { // image
 			if (_IMG_MAX_SIZE > 0
 			AND $taille > _IMG_MAX_SIZE*1024) {
-				@unlink ($fichier);
+				spip_unlink ($fichier);
 				check_upload_error(6,
 				_T('info_logo_max_poids',
 					array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024),
@@ -177,7 +177,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT
 			AND ($size_image[0] > _IMG_MAX_WIDTH
 			OR $size_image[1] > _IMG_MAX_HEIGHT)) {
-				@unlink ($fichier);
+				spip_unlink ($fichier);
 				check_upload_error(6, 
 				_T('info_logo_max_taille',
 					array(
@@ -197,13 +197,13 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
 		if ($mode == 'vignette') {
 			if (!$type_inclus_image) {
 				spip_log ("le format de $fichier ne convient pas pour une image"); # SVG
-				@unlink($fichier);
+				spip_unlink($fichier);
 				return;
 			}
 
 			if (!($largeur * $hauteur)) {
 				spip_log('erreur upload vignette '.$fichier);
-				@unlink($fichier);
+				spip_unlink($fichier);
 				return;
 			}
 		}
diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php
index 550196fb81378541f1abdce4b2987509dfe26179..f9eecd0fb85c90a14a8c046ad4eb3741a9b22fe3 100644
--- a/ecrire/inc/config.php
+++ b/ecrire/inc/config.php
@@ -163,7 +163,7 @@ function appliquer_modifs_config() {
 
 	// provoquer l'envoi des nouveautes en supprimant le fichier lock
 	if (_request('envoi_now')) {
-		@unlink(_DIR_TMP . 'mail.lock');
+		spip_unlink(_DIR_TMP . 'mail.lock');
 	}
 
 	// Purger les squelettes si un changement de meta les affecte
diff --git a/ecrire/inc/export.php b/ecrire/inc/export.php
index 4eca9af29032b91bb93c67a2ec83b99773207f14..399bda43d3c560520ecd3de14c1a55bf10701e10 100644
--- a/ecrire/inc/export.php
+++ b/ecrire/inc/export.php
@@ -132,7 +132,7 @@ function ramasse_parties($dir, $archive)
 	    if (!ecrire_fichier($but,$contenu,false,false))
 	      { $ok = false; break;}
 	  }
-	  @unlink($f);
+	  spip_unlink($f);
 	  $files_o[]=$f;
 	}
 	return $ok ? $files_o : false;
@@ -177,7 +177,7 @@ function export_objets($table, $etape, $cpt, $dir, $archive, $gz, $total, $les_r
 			ecrire_fichier ($temp = $filetable . '.temp' . _EXTENSION_PARTIES, $string);
 	// le fichier destination peut deja exister
 	// si on sort d'un timeout entre le rename et le ecrire_meta
-			if (file_exists($f = $filetable . sprintf('_%04d',$cpt) . _EXTENSION_PARTIES)) @unlink($f);
+			if (file_exists($f = $filetable . sprintf('_%04d',$cpt) . _EXTENSION_PARTIES)) spip_unlink($f);
 			rename($temp, $f);
 		}
 		// on se contente d'une ecriture en base pour aller plus vite
diff --git a/ecrire/inc/filtres_images.php b/ecrire/inc/filtres_images.php
index 4ce22dfe8888bc6ca73cfa0039edeccc6227be94..d7c31978cf1f027d00526c1cbb27182e9aecb2c6 100644
--- a/ecrire/inc/filtres_images.php
+++ b/ecrire/inc/filtres_images.php
@@ -166,7 +166,7 @@ function image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cre
 function image_imagepng($img,$fichier) {
 	$tmp = $fichier.".tmp";
 	$ret = imagepng($img,$tmp);
-	@unlink($fichier); // le fichier peut deja exister
+	spip_unlink($fichier); // le fichier peut deja exister
 	@rename($tmp, $fichier);
 	return $ret;
 }
@@ -175,7 +175,7 @@ function image_imagepng($img,$fichier) {
 function image_imagegif($img,$fichier) {
 	$tmp = $fichier.".tmp";
 	$ret = imagegif($img,$tmp);
-	@unlink($fichier); // le fichier peut deja exister
+	spip_unlink($fichier); // le fichier peut deja exister
 	@rename($tmp, $fichier);
 	return $ret;
 }
@@ -183,7 +183,7 @@ function image_imagegif($img,$fichier) {
 function image_imagejpg($img,$fichier,$qualite=85) {
 	$tmp = $fichier.".tmp";
 	$ret = imagejpeg($img,$tmp, $qualite);
-	@unlink($fichier); // le fichier peut deja exister
+	spip_unlink($fichier); // le fichier peut deja exister
 	@rename($tmp, $fichier);
 	return $ret;
 }
@@ -215,7 +215,7 @@ function reconstruire_image_intermediaire($fichier_manquant){
 		AND $valeurs=unserialize($source)
     AND ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
     ) {
-			@unlink($src); // si jamais on a un timeout pendant la reconstruction, elle se fera naturellement au hit suivant
+			spip_unlink($src); // si jamais on a un timeout pendant la reconstruction, elle se fera naturellement au hit suivant
 			$reconstruire[] = $valeurs['reconstruction'];
    }
 	while (count($reconstruire)){
@@ -233,7 +233,7 @@ function reconstruire_image_intermediaire($fichier_manquant){
 function ramasse_miettes($fichier){
 	if (!lire_fichier($src = "$fichier.src",$source) 
 		OR !$valeurs=unserialize($source)) return;
-	@unlink($src); # on supprime la reference a sa source pour marquer cette image comme non intermediaire
+	spip_unlink($src); # on supprime la reference a sa source pour marquer cette image comme non intermediaire
 	while (
 	     ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
 		AND (substr($fichier,0,strlen(_DIR_VAR))==_DIR_VAR) # et est dans local
@@ -241,9 +241,9 @@ function ramasse_miettes($fichier){
 		AND ($valeurs=unserialize($source))  # et valide
 		) {
 		# on efface le fichier
-		@unlink($fichier);
+		spip_unlink($fichier);
 		# mais laisse le .src qui permet de savoir comment reconstruire l'image si besoin
-		#@unlink($src);
+		#spip_unlink($src);
 	}
 }
 
@@ -471,7 +471,7 @@ function image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process='AUTO',
 				$jpegtopnm_command = str_replace("pnmscale", "jpegtopnm", _PNMSCALE_COMMAND);
 				exec("$jpegtopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
 				if (!($s = @filesize($vignette)))
-					@unlink($vignette);
+					spip_unlink($vignette);
 				if (!@file_exists($vignette)) {
 					spip_log("echec netpbm-jpg sur $vignette");
 					return;
@@ -480,7 +480,7 @@ function image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process='AUTO',
 				$giftopnm_command = str_replace("pnmscale", "giftopnm", _PNMSCALE_COMMAND);
 				exec("$giftopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
 				if (!($s = @filesize($vignette)))
-					@unlink($vignette);
+					spip_unlink($vignette);
 				if (!@file_exists($vignette)) {
 					spip_log("echec netpbm-gif sur $vignette");
 					return;
@@ -489,7 +489,7 @@ function image_creer_vignette($valeurs, $maxWidth, $maxHeight, $process='AUTO',
 				$pngtopnm_command = str_replace("pnmscale", "pngtopnm", _PNMSCALE_COMMAND);
 				exec("$pngtopnm_command $image | "._PNMSCALE_COMMAND." -width $destWidth | $pnmtojpeg_command > $vignette");
 				if (!($s = @filesize($vignette)))
-					@unlink($vignette);
+					spip_unlink($vignette);
 				if (!@file_exists($vignette)) {
 					spip_log("echec netpbm-png sur $vignette");
 					return;
diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php
index 8f5cd1ae9c744fb70b5020f71b53e0e34c24988f..062b31c9c34b6b58f6f35acee02f767546573b7c 100644
--- a/ecrire/inc/flock.php
+++ b/ecrire/inc/flock.php
@@ -113,7 +113,7 @@ function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false, $trunca
 	include_spip('inc/autoriser');
 	if (autoriser('chargerftp'))
 		raler_fichier($fichier);
-	@unlink($fichier);
+	spip_unlink($fichier);
 	return false;
 }
 
@@ -155,9 +155,13 @@ function supprimer_fichier($fichier) {
 	@fclose($fp);
 
 	// supprimer
-	@unlink($fichier);
+	spip_unlink($fichier);
+}
+// Supprimer brutalement, si le fichier existe
+function spip_unlink($fichier) {
+	if (file_exists($fichier))
+		unlink($fichier);
 }
-
 
 //
 // Retourne $base/${subdir}/ si le sous-repertoire peut etre cree,
@@ -196,7 +200,7 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
 		@fputs($test, '<'.'?php $ok = true; ?'.'>');
 		@fclose($test);
 		@include("$path/dir_test.php");
-		@unlink("$path/dir_test.php");
+		spip_unlink("$path/dir_test.php");
 	}
 	if ($ok) {
 		@touch ("$path/.ok");
diff --git a/ecrire/inc/getdocument.php b/ecrire/inc/getdocument.php
index a34800d85eb048345c8a86066c823cd6c573c042..9e7964313dfd6dd56ad336961b1251c21f127715 100644
--- a/ecrire/inc/getdocument.php
+++ b/ecrire/inc/getdocument.php
@@ -40,7 +40,7 @@ function effacer_repertoire_temporaire($nom) {
 	$d = opendir($nom);
 	while (($f = readdir($d)) !== false) {
 		if (is_file("$nom/$f"))
-			@unlink("$nom/$f");
+			spip_unlink("$nom/$f");
 		else if ($f <> '.' AND $f <> '..'
 		AND is_dir("$nom/$f"))
 			effacer_repertoire_temporaire("$nom/$f");
@@ -97,7 +97,7 @@ function deplacer_fichier_upload($source, $dest, $move=false) {
 			include_spip('inc/flock');
 			raler_fichier($dest);
 		}
-		@unlink($dest);
+		spip_unlink($dest);
 	}
 	return $ok;
 }
diff --git a/ecrire/inc/pclzip.php b/ecrire/inc/pclzip.php
index 81cdf0d3cd988cbb2275e4b229e7d2f96bae6181..0116e0aa7f4b5ba86f89db2ccd9b41bbfb48f34d 100644
--- a/ecrire/inc/pclzip.php
+++ b/ecrire/inc/pclzip.php
@@ -2211,7 +2211,7 @@
     {
       fclose($v_zip_temp_fd);
       $this->privCloseFd();
-      @unlink($v_zip_temp_name);
+      spip_unlink($v_zip_temp_name);
       $this->privSwapBackMagicQuotes();
 
       // ----- Return
@@ -2242,7 +2242,7 @@
         if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
           fclose($v_zip_temp_fd);
           $this->privCloseFd();
-          @unlink($v_zip_temp_name);
+          spip_unlink($v_zip_temp_name);
           $this->privSwapBackMagicQuotes();
 
           // ----- Return
@@ -2299,7 +2299,7 @@
 
     // ----- Delete the zip file
     // TBC : I should test the result ...
-    @unlink($this->zipname);
+    spip_unlink($this->zipname);
 
     // ----- Rename the temporary file
     // TBC : I should test the result ...
@@ -4828,7 +4828,7 @@
                 // ----- Close the zip file
                 $this->privCloseFd();
                 $v_temp_zip->privCloseFd();
-                @unlink($v_zip_temp_name);
+                spip_unlink($v_zip_temp_name);
 
                 // ----- Error log
                 PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
@@ -4845,7 +4845,7 @@
                 // ----- Close the zip file
                 $this->privCloseFd();
                 $v_temp_zip->privCloseFd();
-                @unlink($v_zip_temp_name);
+                spip_unlink($v_zip_temp_name);
 
                 // ----- Return
                 //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
@@ -4864,7 +4864,7 @@
                 // ----- Close the zip file
                 $this->privCloseFd();
                 $v_temp_zip->privCloseFd();
-                @unlink($v_zip_temp_name);
+                spip_unlink($v_zip_temp_name);
 
                 // ----- Return
                 //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
@@ -4877,7 +4877,7 @@
                 // ----- Close the zip file
                 $this->privCloseFd();
                 $v_temp_zip->privCloseFd();
-                @unlink($v_zip_temp_name);
+                spip_unlink($v_zip_temp_name);
 
                 // ----- Return
                 //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
@@ -4897,7 +4897,7 @@
             if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
                 $v_temp_zip->privCloseFd();
                 $this->privCloseFd();
-                @unlink($v_zip_temp_name);
+                spip_unlink($v_zip_temp_name);
 
                 // ----- Return
                 //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
@@ -4925,7 +4925,7 @@
             unset($v_header_list);
             $v_temp_zip->privCloseFd();
             $this->privCloseFd();
-            @unlink($v_zip_temp_name);
+            spip_unlink($v_zip_temp_name);
 
             // ----- Return
             //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
@@ -4938,7 +4938,7 @@
 
         // ----- Delete the zip file
         // TBC : I should test the result ...
-        @unlink($this->zipname);
+        spip_unlink($this->zipname);
 
         // ----- Rename the temporary file
         // TBC : I should test the result ...
@@ -5238,7 +5238,7 @@
 
     // ----- Delete the zip file
     // TBC : I should test the result ...
-    @unlink($this->zipname);
+    spip_unlink($this->zipname);
 
     // ----- Rename the temporary file
     // TBC : I should test the result ...
@@ -5733,7 +5733,7 @@
         //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to copy file");
         $v_result = 0;
       }
-      else if (!@unlink($p_src)) {
+      else if (!spip_unlink($p_src)) {
         //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to unlink old filename");
         $v_result = 0;
       }
diff --git a/ecrire/inc/session.php b/ecrire/inc/session.php
index 5d3fb85a0b6c4a7e11e5f03ea833709fcb9a2d54..1f7f7f4da33d2b277502d32f65dedc269560e480 100644
--- a/ecrire/inc/session.php
+++ b/ecrire/inc/session.php
@@ -95,7 +95,7 @@ function supprimer_sessions($id_auteur) {
 		if (preg_match(",^\D*(\d+)_\w{32}\.php[3]?$,", $f, $regs)){
 			$f = _DIR_SESSIONS . $f;
 			if (($regs[1] == $id_auteur) OR ($t > filemtime($f)))
-				@unlink($f);
+				spip_unlink($f);
 		}
 	}
 }
@@ -124,7 +124,7 @@ function verifier_session($change=false) {
 
 		// Renouveler la session avec l'alea courant
 		include($fichier_session);
-		@unlink($fichier_session);
+		spip_unlink($fichier_session);
 		ajouter_session($GLOBALS['auteur_session']);
 	}
 
@@ -143,7 +143,7 @@ function verifier_session($change=false) {
 		}
 	} else if ($change) {
 		spip_log("rejoue session $fichier_session ".$_COOKIE['spip_session']);
-		@unlink($fichier_session);
+		spip_unlink($fichier_session);
 		$GLOBALS['auteur_session']['ip_change'] = false;
 		unset($_COOKIE['spip_session']);
 		ajouter_session($GLOBALS['auteur_session']);
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 2b927dbb0cf1cd58fc62c378fca405d8b82f04b7..3aefb22e07975a0e98ac55bc8545aca14e1ae181 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -177,7 +177,7 @@ function spip_log($message, $logname='spip') {
 	}
 
 	if ($rotate-- > 0) {
-		@unlink($logfile . '.' . $rotate);
+		spip_unlink($logfile . '.' . $rotate);
 		while ($rotate--) {
 			@rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1));
 		}
@@ -568,7 +568,7 @@ function spip_touch($fichier, $duree=0, $touch=true) {
 	|| ($duree == 0)
 	|| (@filemtime($fichier) < time() - $duree)) {
 		if ($touch) {
-			if (!@touch($fichier)) { @unlink($fichier); @touch($fichier); };
+			if (!@touch($fichier)) { spip_unlink($fichier); @touch($fichier); };
 			if (!$exists) @chmod($fichier, _SPIP_CHMOD & ~0111);
 		}
 		return true;
@@ -710,7 +710,7 @@ function creer_chemin() {
 	$path_a = _chemin();
 	static $c = '';
 
-	// provisoire, a remplacer par un @unlink sur les fichiers compiles lors d'un prochain upgrade
+	// provisoire, a remplacer par un spip_unlink sur les fichiers compiles lors d'un prochain upgrade
 	if (isset($GLOBALS['plugins'])){
 		$c = '';
 		foreach($GLOBALS['plugins'] as $dir) $path_base = _chemin(_DIR_PLUGINS.$dir);
diff --git a/ecrire/install/etape_4.php b/ecrire/install/etape_4.php
index ac6c85dc80c45d671e31845f9b7704a7531880f1..f527c3a8a8b67353334751cf234b7442a6559898 100644
--- a/ecrire/install/etape_4.php
+++ b/ecrire/install/etape_4.php
@@ -53,7 +53,7 @@ function install_etape_4_dist()
 		    _DIR_ETC . 'connect.php')) {
 		copy(_FILE_CONNECT_INS . _FILE_TMP . '.php', 
 		     _DIR_ETC . 'connect.php');
-		@unlink(_FILE_CONNECT_INS . _FILE_TMP . '.php');
+		spip_unlink(_FILE_CONNECT_INS . _FILE_TMP . '.php');
 	}
 
 	# maintenant on connait le vrai charset du site s'il est deja configure
@@ -104,8 +104,8 @@ function install_etape_4_dist()
 
 
 	$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
-	@unlink($htpasswd);
-	@unlink($htpasswd."-admin");
+	spip_unlink($htpasswd);
+	spip_unlink($htpasswd."-admin");
 	ecrire_acces();
 	ecrire_metas();
 
@@ -113,7 +113,7 @@ function install_etape_4_dist()
 		    _DIR_ETC . 'chmod.php')) {
 		copy(_FILE_CHMOD_INS . _FILE_TMP . '.php', 
 		     _DIR_ETC . 'chmod.php');
-		@unlink(_FILE_CHMOD_INS . _FILE_TMP . '.php');
+		spip_unlink(_FILE_CHMOD_INS . _FILE_TMP . '.php');
 	}
 
 	// et on l'envoie dans l'espace prive
diff --git a/ecrire/install/etape_chmod.php b/ecrire/install/etape_chmod.php
index bfcfb769fde4110b5e6fbf34b64d91a3c10b18e4..44a7479a82bd2211b91d63fb5336cf45aa0ac972 100644
--- a/ecrire/install/etape_chmod.php
+++ b/ecrire/install/etape_chmod.php
@@ -39,7 +39,7 @@ function test_ecrire($my_dir) {
 	// avec celle du script et du repertoire courant
 	if(!$chmod) {
 		@rmdir('test');
-		@unlink('test'); // effacer au cas ou
+		spip_unlink('test'); // effacer au cas ou
 		@touch('test');
 		if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid)
 			$chmod = 0700;
@@ -52,7 +52,7 @@ function test_ecrire($my_dir) {
 			$perms = ($perms & 0777) | (($perms & 0444) >> 2);
 			$chmod |= $perms;
 		}
-		@unlink('test');
+		spip_unlink('test');
 	}
 	// Verifier que les valeurs sont correctes
 	$f = @fopen($my_dir.'test.php', 'w');
@@ -62,7 +62,7 @@ function test_ecrire($my_dir) {
 		@chmod($my_dir.'test.php', $chmod);
 		include($my_dir.'test.php');
 	}
-	@unlink($my_dir.'test.php');
+	spip_unlink($my_dir.'test.php');
 	return $ok?$chmod:false;
 }
 
diff --git a/ecrire/install/etape_ldap5.php b/ecrire/install/etape_ldap5.php
index 5cfae2206a629c580bec00c35dc55dc2894803c3..5b6a8f447cfdb4c7d8e22fbac798cc95d2a81e1e 100644
--- a/ecrire/install/etape_ldap5.php
+++ b/ecrire/install/etape_ldap5.php
@@ -25,7 +25,7 @@ function install_etape_ldap5_dist()
 		redirige_par_entete(generer_url_ecrire('install'));
 
 	ecrire_meta('ldap_statut_import', _request('statut_ldap'));
-	@unlink(_FILE_META); // virer le vieux ca suffit.
+	spip_unlink(_FILE_META); // virer le vieux ca suffit.
 
 	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
 
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index 0ae9f5e616d2eb032863dbeb0f5923c0dc3a48ca..b40c56692ed74c074bdd1f2ff927b75af58dac8c 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -143,7 +143,7 @@ function nettoyer_petit_cache($prefix, $duree = 300) {
 	if (spip_touch($dircache.'purger_'.$prefix, $duree, true)) {
 		foreach (preg_files($dircache,'[.]txt$') as $f) {
 			if (time() - (@file_exists($f)?@filemtime($f):0) > $duree)
-				@unlink($f);
+				spip_unlink($f);
 		}
 	}
 }