PHP/MySQL et CDDB........ - PHP - Programmation
Marsh Posté le 01-01-2003 à 13:30:06
bon !
n'ayant pas eu de réponse rapidement, je fais ce que je voulais faire
c'est-à-dire faire un script PHP qui enregistre le contenu des fichiers
de la CDDB dans une base SQL.
Seulement j'ai un problème incompréhensible :
à l'ouverture d'un fichier, j'ai une erreur 'Resource id #3' renvoyée par un 'fopen'
Aidez-moi !
mon script est dispo à http://usa.mike.free.fr/mycddb.zip
il ya dans le zip :
'creation.SQL.sql' pour créer votre base avec MySQL
'config_server.php' les paramêtres d'accès à la base (moi j'utilise EasyHP en local)
'index.php' l'entrée du script (la valeur par défaut suffit, cliquez juste sur le bouton)
'grab.php' le script
'fn_misc.php' les différentes focntions dont je me sers et que j'ai fait (sans bug connu)
'fn_db.php' fonction d'enregistrement dans la base ou affichage à l'écran
'cddb' un répertoire contenant 3 exemples de fichiers de la CDDB
Si vous voulez l'intégralité de ces fichiers CDDB, ils sont dispo à http://www.freecddb.org
Je vous préviens c'est un gros ZIP de 140 Mo qui comprend 700 Mo de fichiers Txt
Bon mon problème (qui doit être très con je pense) :
Tout d'abord, modifier la valeur de $FAIRE dans 'fn_db.php' suivant ce que vous voulez faire :
$FAIRE=1; // on écrit les infos dans la base
$FAIRE=2; // on écrit les reqêtes dans un fichier sql.txt
$FAIRE=3; // on affiche uniquement les infos, on ne fait pas d'enregistrement
Ouvrez le fichier 'grab.php', à la ligne 3 il y a :
GRAB_FICHIER("cddb/1.txt" );
ça, ça marche très bien (faites un essai avec $FAIRE=1, vous verrez)
ensuite il y a GRAB_FICHIER("cddb/2.txt" );
et ça, ça ne marche pas, ni le GRAB_FICHIER("cddb/3.txt" ); qui suit derrière.
à l'écran, tout tout en bas de la page, j'ai affiché la valeur retourné par fopen qui est du style :
'Resource id #x' ou x est une valeur qui varie je ne sais pas comment.
J'affiche cette valeur à la ligne 134 de 'fn_misc.php' avec :
echo "!!!!!!!!!!! erreur: $FIC avec $FICHIER !!!!!!!!!!!!!!!!
";
Auparavant je fais bien :
$FIC=fopen($FICHIER,"r" );
if ($FIC==1)
{
echo "Grabbing du fichier $FICHIER ...";
while (!feof($FIC)) {....}
}
else
echo "!!!!!!!!!!! erreur: $FIC avec $FICHIER !!!!!!!!!!!!!!!!
";
Moi je comprends par ce message que c'est un problème de ressource.
l'exécution du GRAB_FICHIER("cddb/1.txt" ); génére 6500 requêtes
Alors je me dis :
"tiens !!, Mysql n'arrive plus à suivre et est débordé, donc c'est nu problème de ressource"
mais là je me dis aussi que je travaille en local, sur une machine assez performante (1.3Go et 512 RAM)
donc il devrait quand-même suivre cette cadence
(.. quand je pense que c'est pas 3 fichiers qu'il faudra traiter au final mais 2000....)
Du coup au lieu d'enregistrer mais info dans la base (variable $FAIRE), je décide de généré un fichier texte avec dedans
les requpetes SQL
je met donc '$FAIRE=2' dans 'fn_db.php'
Et là ! Idem !! même problème !!! le 1er fichier marche mais pas les autres.
alors maintenant je me dis que c'est peut-être apache qui suit plus car ecrire un fichier texte doit etre moins lourd en ressource
qu'exécuter des requêtes dans mySQL.
Du coup au lieu de créer ce fichier texte, je vais tout simplement afficher les résultats à l'écran.
je met donc '$FAIRE=3' dans 'fn_db.php'
Et encoire même problème machin de ressource à la con !!
Je ne comprend pas.
J'ai pourtant bien vérifié que j'ouvre proprement mon fichier, que je teste bien son ouverture, que je le referme bien.
où est le chmil-blic ??
est-ce que je referme mal mon fichier ?
est-ce un problème de ressoure ?
est-ce un problème de temporisation ?
est-ce un problème de buffer ?
est-ce un autre problème ?
help-me !
Marsh Posté le 02-01-2003 à 03:09:13
trop bizarre, le code que je viens de voir lespace de 3 minutes me semble niquel et pourtant, quand on voit ton probleme, ya de koi se poser des questions.
Citation : |
Citation : |
et voila ...
Marsh Posté le 02-01-2003 à 08:50:48
mais dans la doc PHP, ya bien écrit que fopen renvoie 1 quand tout ce passe bien, sinon autre chause.
Marsh Posté le 02-01-2003 à 10:31:36
pas ds la mienne, et je vois pas comment si ca retourne toujours 1, on fait la difference entre 2 fichiers ouverts en meme temps.
Marsh Posté le 02-01-2003 à 10:57:35
Merci pour l'info , ca faisait longtemps ke je cherchais a savoir si cette base etait exploitable.
en fait avec ce fichier texte, il faut le formater et l'inserer dans une base , ensuite tu peux manipuler les données comme tu le souhaite
Marsh Posté le 02-01-2003 à 13:59:02
C bon je viens de corrigerle problème et ça marche nickel
attention, j'ai enlévé du ZIP les exemple de fichier CDDB (pas les droit !!)
alors allez les télecharger sur le site officiel.
Aussi, ces fichiers ne sont plus obligés d'etre dans /files, vous pouvez les mettre où vous voulez sur votre disque
C:\temp\cddb\ par exemple !
sinon faite gaffe !
il faut mettre un min_execution_time=0 car pour foutre dans mysql 9 Mo de fichiers, ça ma prit 3 minutes sur ma machine pourtant assez performante (1.3G 512 Ram) alors imaginez le temps qu'il faut pour incorporer les 700 Mo de fichiers textes.
Pour info, la base générée avec Mysql est de taille plus petite que les fichiers (logique, car on n'a pas tout gardé comme info)
n'empêche que c'est un bon moyen pour tester une base donnée mon machin.
Je vais essayer de faire le même pour une base access.....
Marsh Posté le 01-01-2003 à 13:29:25
bonjour,
je viens de télécharger la grosse base de données CDDB de 140 Mo compressée.
Celle-ci se prensente sous la forme d'une grosse liste de fichiers textes
bien structurés et exploitables.
Quelqu'un saurait-il s'il existe une interface déjà faite avec PHP
qui permette d'insérer le contenu de ces fichiers dans une base de données en l'occurence MySQL.
Merci de me le dire car sinon, je commence ce projet.
J'aimerai avoir la possibilité de faire mes recherches de titres de chansons off-line et donc c'est la seule solution agréable que j'ai trouvé.
Plutôt que de dire à windows de chercher la chaine x dans les fichiers.
---------------