Erreur PHP - débutant

Erreur PHP - débutant - PHP - Programmation

Marsh Posté le 08-08-2007 à 11:59:48    

Bonjour,
J'ai un script tout simple qui bug et génére l'erreur suivante : "script not found or unable to stat"
Qu'est ce que ça signifie ? voici le code :
 

Code :
  1. <?php 
  2.   if (!isset($_COOKIE['listing']))
  3.   {
  4.    $user=uniqid(rand(),true);
  5.                      setCookie('listing',$user,time()+3600*24*30,'/','.monsite.fr');
  6.  
  7.    $sql="CREATE TABLE '".$user."' (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`url` VARCHAR( 100 ) NOT NULL ,`ladate` VARCHAR( 20 ) NULL ,`lheure` VARCHAR( 10 ) NULL) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_swedish_ci COMMENT = 'details des visites'";
  8.    mysql_query($sql) or die('<b>Erreur SQL sur creation de table :<br>'.mysql_error());
  9.    /*  on y insère les données sur la page en cours  */
  10.    $url_en_cours = 'http://www.monsite.fr/'.$_SERVER['REQUEST_URI'];
  11.    $datedujour = date('Y-m-d');
  12.    $heureencours = date('H:i');
  13.    $sql2="insert into '".$user."' (id,url,ladate,lheure) values ('',$url_en_cours,$datedujour,$heureencours)";
  14.    mysql_query($sql2) or die('<b>Erreur SQL d\'insertion de table :<br>'.mysql_error());
  15.     }
  16. ?>


En fait ce script sert à enregistrer le parcours des visiteurs; étant débutante, c'est le seul moyen que j'ai trouvé.
Merci

Reply

Marsh Posté le 08-08-2007 à 11:59:48   

Reply

Marsh Posté le 08-08-2007 à 12:03:19    

Juste une précision, ce script est appelé depuis un fichier javascript comme ceci : <script language="text/javascript" src="http://www.monsite.fr/test/listing.php"></script>

Reply

Marsh Posté le 08-08-2007 à 12:05:24    

<script language="text/javascript" tu veux executer du javascript ( cote client ) et ton script est du php ( coté serveur )  
 
pour suivre tes visiturs, il faut que tu inclus ton code php au debut de chacune des pages de ton site

Reply

Marsh Posté le 08-08-2007 à 12:09:50    

Code :
  1. $sql2="INSERT INTO $user (url,ladate,lheure) VALUES ('$url_en_cours', '$datedujour', '$heureencours')";
 

Y'a des chances que ça marche mieux comme ça aussi :D


Message édité par Kyfun le 08-08-2007 à 12:10:03

---------------
Comme dirait quelqu'un de beaucoup plus avisé que moi, quelquefois c'est toi qui cognes le bar mais d'autres fois, et ben, c'est le bar qui te cogne.
Reply

Marsh Posté le 08-08-2007 à 12:16:50    

Je rêve ou il créé une table à chaque user [:pingouino]

Message cité 2 fois
Message édité par FlorentG le 08-08-2007 à 12:16:57
Reply

Marsh Posté le 08-08-2007 à 12:47:03    

FlorentG a écrit :

Je rêve ou il créé une table à chaque user [:pingouino]


 
Elle  :o  
 
Niveau perf ca va etre catastrophique je pense mais bon :D


---------------
Comme dirait quelqu'un de beaucoup plus avisé que moi, quelquefois c'est toi qui cognes le bar mais d'autres fois, et ben, c'est le bar qui te cogne.
Reply

Marsh Posté le 08-08-2007 à 12:57:33    

FlorentG a écrit :

Je rêve ou il créé une table à chaque user [:pingouino]


 
Figure 1 : J'ai séché les cours sur les modèles de données
[:vapeur_cochonne]
 

Reply

Marsh Posté le 08-08-2007 à 14:17:08    

Merci flo850 et InTh3WinDDD : le pb c que mon site tourne avec CMS particulier et je peux uniquement insérer quelque chose dans un fichier Javascript.
 
Oui effectivement je crée une table a chaque user, pour l'instant je souhaite faire tourner ce script que pendant des laps de temps brefs (30 min). D'ailleurs sinon comment gérer ça autrement : j'attends vos lumières (sincèrement) !!!
 
Enfin je ne suis pas informaticienne, et je n'ai donc jamais eu de cours sur le modèle de donnée. Je grapille des infos à droite à gauche, sur le tas. L'hébergeur ne nous jettera pas car c dans le cadre de mon travail que je fais ce script (j'irai quand même pas m'amuser à faire du Php pour le loisir, lol !!!)

Reply

Marsh Posté le 08-08-2007 à 14:30:05    

Sinon serait-il possible d'appeler le script Php depuis l'évenement onLoad Javascript, pour que ça se lance dès le début ?

Reply

Marsh Posté le 08-08-2007 à 14:30:53    

En gros pour faire quelque chose de viable dans ton cas, tu dois créer une table users (une seule fois) et tu insere les personnes dedans plutot que créer à chaque fois une table du nom de la personne qui ne contient qu'un enregistrement.
 
PS : tu utilise quel CMS ?

Reply

Marsh Posté le 08-08-2007 à 14:30:53   

Reply

Marsh Posté le 08-08-2007 à 14:58:30    

pepita8 a écrit :

Sinon serait-il possible d'appeler le script Php depuis l'évenement onLoad Javascript, pour que ça se lance dès le début ?


oui , mais c'est crade
 
utilsie plutot une image générée en php ( librairie gd ) , au sein de laquelle tu trace l'utilisateur  
 

Reply

Marsh Posté le 08-08-2007 à 16:51:12    

Ok pour faire une seule table, mais après je vais me retrouver avec des volumes de données pas possible dans une seule table, l'autre jour je me suis retrouvée avec une table de 57 000 entrées, c'est ingérable.
 
Le CMS il a été développé exprès pour la société à ce qu'on m'a dit, mais on utilise aussi une suite de logiciels IBM, qui donne des URL bizarres avec plein de chiffres et de lettres mélangées.
Disons qu'en fait ce serveur bizarre affiche les pages et mon script est sur un serveur apache.
 
"Image générée en PHP" : vous m'en demandez trop !!!

Reply

Marsh Posté le 08-08-2007 à 16:55:36    

57 000 entrée , c'est tout a fait gérable ( un simple mysql gere sans problème des tables de plusieurs millions d'entrée )  
 
par contre, avoir 600 tables, avec en plus le risque qu'un user ai le nom d'une table existante, c'est gore :d
 
après pour la génération d'image , c'est pas si compliqué que ça , mais il faut que ton serveur ai gd

Reply

Marsh Posté le 08-08-2007 à 16:58:27    

image générée par php -> lib GD
et 57000 lignes dans une table, c'est rien. Ex : une table mysql peut contenir plusieurs millions de lignes.

Citation :

Selon la doc :
 
MySQL 3.22 had a 4GB (4 gigabyte) limit on table size. With the MyISAM storage engine in MySQL 3.23, the maximum table size was increased to 65536 terabytes (256^7 – 1 bytes). With this larger allowed table size, the maximum effective table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits.
 
The InnoDB storage engine maintains InnoDB tables within a tablespace that can be created from several files. This allows a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which allows extremely large tables. The maximum tablespace size is 64TB.


 
Donc, la limite dépend surtout de l'OS
 
Pour te donner un ordre de grandeur, j'ai actuellement une BD en prod pour un intranet qui fait 30 Mo pour 146000 entrées. Donc pour atteindre les 4Go, je peux en mettre des enregistrements ;)


Message édité par rufo le 08-08-2007 à 16:59:45
Reply

Marsh Posté le 08-08-2007 à 17:46:29    

rufo > J'ai mieux comme exemple, là où je bossais l'an dernier, on avait une table qui recevait chaque jour plusieurs millions de lignes de données. On est très loin des 57 000 de pepita8.
 
pepita8 > A partir du moment où tu as l'identifiant de l'utilisateur dans ta table de log, alors l'ensemble est beaucoup plus facile à utiliser qu'un groupe de 5000 tables. En fait, c'est avoir 5000 tables qui contiennent toutes 10 lignes et qui servent toutes à la même chose qui est ingérable. T'imagines, ce que tu fais, c'est comme si la poste te livrait les pages blanche de ta ville en feuille volante (une feuille par rue ou par nom de famille) sous prétexte que c'est ingérable de tout avoir en un seul volume.
 
En fait, avec une seule table, tu peux savoir en une requête assez simple :
- combien de fois chaque page a été consulté dans la journée "select * from matable where ladate = 'ladatedaujourdhui' "  (ou "ladate>='(ladatedaujourd'hui)' and ladate <'ladatededemain' " si t'as aussi l'heure)  
- qui à demandé telle ou telle page "select dinstinct(userid) from matable where page='machin' "  
- quelles pages ont été regardé par "toto" "select * from matable where userid='(identifiantdetoto)' "  
 
Avec 5000 tables, tu es obligé d'exécuter 5000 requêtes pour avoir les deux premières informations. Impensable.


Message édité par omega2 le 08-08-2007 à 18:08:50
Reply

Marsh Posté le 08-08-2007 à 17:53:25    

c'est pas flo850 mais pepita8

Reply

Marsh Posté le 08-08-2007 à 18:08:25    

Qu'elle idée aussi de citer sans quoter. ;)

Reply

Marsh Posté le 08-08-2007 à 18:20:40    

Après plusieurs tentatives, il apparait impossible d'ajouter quelque chose en haut de page.
 Je vais donc essayer la version image : comment tracer quelqu'un avec une image (dans le principe) ? Qu'est ce que va m'apporter le fait de mettre une image ? et si je l'insère comme avant (au travers de JS), est-ce que ça va mieux marcher ?

Reply

Marsh Posté le 08-08-2007 à 18:26:26    

non, tu l'insère avec un tag <img src="trace.php" />
et dans trace.php, tu fais la partie qui te sert à tracer puis tu génère une image que tu renvoies


---------------
The Rom's, à votre service
Reply

Marsh Posté le 08-08-2007 à 18:41:40    

Code :
  1. <?php
  2. header ("Content-type: image/png" );
  3. /**
  4. * tes trucs SQL ici
  5. */
  6. $im = imagecreatetruecolor(1, 1);
  7. imagesavealpha($im, true);
  8. imagefill($im, 0, 0, imagecolorallocatealpha($im, 0, 0, 0, 127));
  9. imagepng($im);
  10. ?>

Reply

Marsh Posté le 09-08-2007 à 11:33:11    

pepita8 a écrit :

Ok pour faire une seule table, mais après je vais me retrouver avec des volumes de données pas possible dans une seule table, l'autre jour je me suis retrouvée avec une table de 57 000 entrées, c'est ingérable.


D'après-toi, comment fait un forum comme celui-ci qui a des millions d'enregistrements ? :D

Reply

Marsh Posté le 09-08-2007 à 16:54:30    

Merci Maxaks pour le bout de code et aux autres qui m'ont apporté des éléments de réponse.
Malheureusement aujourd'hui je dois faire un reporting et pour ça écrire des demandes MySql, encore tout un bordel, mais heureusement que j'ai Internet !!! Mais peut-être demain je pourrai me remettre à ce script.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed