2010-12-10 34 views
0

J'ai un script principal dans lequel je supprime (dissocie) un fichier. Ensuite, dans un script que j'inscris plus tard dans ce script principal, j'écris dans ce fichier (dans le fichier avec le même nom que celui supprimé de toute façon, car il devrait déjà être parti maintenant).Quel est le problème avec l'ordre des opérations PHP?

Ce qui se passe, c'est qu'après l'exécution du script principal, le fichier est supprimé. Tout comme l'opération de dissociation a eu lieu après l'écriture dans le fichier. La même chose se produit, quand je tronque le fichier dans le script principal (en l'écrasant avec une chaîne vide) et écris plus tard dans ce fichier. Le résultat est que le fichier est vide (comme si le fichier était tronqué après l'écriture, mais l'ordre littéral dans le code est inversé).

Qu'est-ce qui ne va pas ici? Ou si ce n'est pas le cas, pourquoi cela fonctionne-t-il de cette façon?

EDIT:

premier (dans le script principal):

unlink($config['directory'].'logs/info.txt'); 

puis (dans certains comprennent script):

$f = fopen($config['directory'].'logs/info.txt', "w"); 
fwrite($f, "Text"); 
fclose($f); 

Je pensais qu'il peut y avoir une erreur commune, que vous pourrait signaler (comme ne pas appeler fclose ou quelque chose). Donc probablement je dois enquêter plus près (mais je suis sûr qu'aucune autre opération sur ce fichier est faite, parce que j'ai utilisé un nom unique du fichier, une même chose arrive).

+1

pouvez-vous s'il vous plaît s'il vous plaît poster votre code php? –

+0

Le deuxième argument pour fopen() n'est pas un nom de fichier mais le type d'accès: 'r', 'w', etc. Vous pouvez trouver la référence complète sur http://es2.php.net/manual/fr/ function.fopen.php –

Répondre

0

Comment écrire plus tard dans le fichier? file_put_contents() est à sens unique (et je n'utilise presque plus rien d'autre) mais si vous utilisez fopen/fwrite et oubliez le fclose qui pourrait causer des problèmes comme celui-ci.

0

Il est impossible de donner une réponse définitive sans réellement voir le code, mais une possibilité est qu'une demande de ressources provenant du client se produise en arrière-plan qui provoque la suppression du fichier une fois la requête principale terminée. Essayez d'utiliser des traces de pile dans la partie du script qui supprime le fichier pour identifier comment il est appelé à nouveau; voir debug_backtrace ou debug_print_backtrace.

2

Retirez le txt du fopen - Mode paramater

$f = fopen($config['directory'].'logs/info.txt', "w"); 

http://php.net/manual/en/function.fopen.php

+0

Fait, mais c'était une erreur dans le post, le code était correct. – JohnM2

+0

Si vous changez la ligne de code non liée avec les lignes d'écriture, cela fonctionne-t-il correctement (le fichier doit être supprimé)? –

+0

Dans les deux cas, le fichier est supprimé après l'exécution du script. C'est le problème. – JohnM2

0

Juste une pensée, mais avez-vous essayé de rinçage la sortie? Vous pouvez utiliser fflush($f); pour forcer php à écrire toutes les données mises en mémoire tampon dans le fichier.

Bien sûr, vous ne devriez pas en avoir besoin - en fait l'ouvrir avec l'indicateur 'w' tronque le fichier de toute façon. Êtes-vous sûr que c'est ouvert correctement? Peut-être essayer quelque chose comme ceci:

$f = fopen($config['directory'].'logs/info.txt', "w"); 
if($f === false)die('File opening failed!'); 
fwrite($f, "Text"); 
fflush($f); 
fclose($f); 
+0

Lorsque je fais cela, le résultat est comme décrit ci-dessus, le fichier finit tronqué (vide), même lorsque j'ajoute fflush ($ f) et fclose ($ f) après fopen. Très étrange. – JohnM2