8795 sujets

Développement web côté serveur, CMS

Bonjour,

quand j'execute ce bout de code en localhost sur ma machine , je n'ai pas de souci par contre si je l'execute chez mon hébergeur j'ai le message de l'echo :

"Impossible de verrouiller le fichier"

if(!file_exists("$file"))
{
$fp=fopen("$file","w");
if (flock($fp, LOCK_EX)) { // pose un verrou exclusif
fputs($fp,"0");
flock($fp, LOCK_UN); // libère le verrou
}
else {
echo "Impossible de verrouiller le fichier!";
}
fclose($fp);
[code]

Qu'est qui peut empecher le lock du fichier ?

Merci
Modifié par pcsystemd (15 Oct 2008 - 13:11)
Je n'en suis pas sûr mais à mon avis c'est un problème de configuration du PHP, un phpinfo() peut t'indiquer si certaines fonctions sont désactivées ou non.

de plus voici ce que dit la doc sur php.net
a écrit :

flock() ne fonctionne pas sur NFS ou sur les autres systèmes de fichiers réseaux. Vérifiez la documentation de votre système d'exploitation pour plus de détails.


C'est peut-être aussi une piste si ton hébergeur n'est pas sous windows...
Merci.

Effectivement mon hébergeur étant sous UNIX ils doivent utilises des partages NFS. Comment faire alors ? car si plusieurs personnes clic au même temps sur ma bannière il y aura un souci pour l'incrémentation du compteur!Non?
C'est effectivement une bonne question...

tu dois pouvoir régler ça avec une base de donnée plutôt qu'avec un fichier en écriture.
Je pense à une table MySQL en InnoDB avec un LOCK lors de l'écriture dans la table.

Toutefois c'est peut-être prendre un porte-avion pour chasser une mouche... Combien de visiteurs as-tu en moyenne sur ton site?
A mon sens, sauf si tu t'attend à des millions de visteurs tu peux prendre le risque de rater un clic, et pour cela il faudrait que deux visiteurs cliquent au même dixième de seconde, et que la requête arrive au même dixième de seconde au serveur, ce qui est peu problable sur un site pas trop chargé... enfin je peux me tromper, peut-être que quelqu'un avec une expérience de ce genre de problèmes sera d'une plus grande aide que moi. Je n'ai pas besoin de savoir au clic près la fréquentation de mes sites...

Deuxio, tu peux voir combien de clics ont été effectués sur ta bannière si celle-ci pointe sur une adresse précise dans ton site grâce aux statistiques détaillées de ton fournisseur d'accès. Et même si celui-ci ne t'en fourni pas tu peux t'inscrire à google analytics qui le fera pour toi...

Je pense qu'avec ces trois solutions (fichier, DB, statistiques) tu dois trouver ton bonheur (ou en utilisant deux sur trois p.ex.) Smiley smile