<?php 
$fn = 'file.txt';
 
echo '<br />is_file: '; $r = is_file($fn); var_export($r);
echo '<br />is_executable: '; $r = is_executable($fn); var_export($r);
echo '<br />is_readable: '; $r = is_readable($fn); var_export($r);
echo '<br />is_writable: '; $r = is_writable($fn); var_export($r);
echo '<br />is_resource: '; $r = is_resource($fn); var_export($r);
echo '<br />filetype: '; $r = filetype($fn); var_export($r);
copy($fn,'cp'.$fn);
 
highlight_file(__FILE__);
?>

Résultat :

is_file: true
is_executable: false
is_readable: true  <--- 
is_writable: true   <--- 
is_resource: false
filetype: 'file'
Warning: copy(file.txt) function.copy: failed to open stream: Permission denied in C:\...\test.php on line 10

Qu'est-ce qui peut faire planter un copy d'un fichier readable et d'une cible writable ?

Et bien le test est fait sous vista et le fichier à copier est "chiffré"

Reste à trouver une chose, comment tester le fichier pour savoir s'il est "chiffré" avant de tenter la copie.

J'ai essayé un dernier truc : chiffrer le script lui même.

Résultat, php ne sait même plus le lire

Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Conclusion Ce problème reste mineur parce que il ne se présente qu'en développement (malgrès les récentes annonces, je n'oserai une prod sur windows) mais c'est un problème bête qui m'est arrivé au cours d'un développement et on perd inutilement du temps à chercher l'origine de l'erreur.