Duplication de tables - mise à jour d'un script

Eléphanteau du PHP | 30 Messages

19 avr. 2010, 11:57

Bonjour,

J'ai hérité d'un site qui contient des scripts que j'ai pu mettre à jour au fur est à mesure des évolutions, mais là, je suis bloquée sur quelque chose que je n'ai jamais fait :-(

Ce script fonctionnait jusqu'à la fin 2009, mais une nouvelle mise à jour du serveur le fait "bugger".
Un grand merci d'avance pour vos idées :-)

Voici le code qui doit dupliquer les tables....
----
// Connects to DB
	$myDB = mysql_connect("localhost", "xxx", "yyyy");
	$success = mysql_select_db("rrrr", $myDB);

// Creates list of tables we want to duplicate
	$tables[0] = 't_Lignes';
	$tables[1] = 't_Trajets';
	$tables[2] = 't_Grilles';
	$tables[3] = 't_Arrets';
	$tables[4] = 't_Heures';
	$tables[5] = 't_Attributs';
	$tables[6] = 't_lienHeuresAttributs';
	$tables[7] = 't_Depositaires';
	$tables[8] = 't_InfoVentes';
	$tables[9] = 't_Bulles';

	$nbTables = count($tables);

// Empty previously created tables
	for($i=0;$i<$nbTables;$i++)
	{
		$qry = "DELETE FROM " . $tables[$i];
		echo("<BR>" . $qry);
		$result = mysql_query($qry, $myDB) or die("Invalid query: " . mysql_error());


		$qry = "INSERT INTO " . $tables[$i] . " SELECT * FROM " . $tables[$i] . "__1";
		echo("<BR>" . $qry);
		$result = mysql_query($qry, $myDB) or die("Invalid query: " . mysql_error());
	}

// Disconnects from DB
	mysql_close($myDB);
---

Mammouth du PHP | 672 Messages

19 avr. 2010, 14:45

Ce script fonctionnait jusqu'à la fin 2009, mais une nouvelle mise à jour du serveur le fait "bugger".
Bonjour.
C'est un peu court...

- Message d'erreur ? Lequel ?
- Le script fonctionne, mais le résultat n'est pas conforme aux attentes ?
- Autre - préciser...

Eléphanteau du PHP | 30 Messages

19 avr. 2010, 16:43

En fait, il ne se passe rien...

Je m'explique:
Avant = ce script - dès lors qu'il était activé, simplement depuis une autre page où l'on a "Voulez-vous mettre à jour? OUI" - fonctionnait, à savoir qu'il dupliquait les données des 1ères tables sur les 2èmes.

Maintenant = il ne se passe simplement rien :-(
Il n'y a pas de message d'erreur, mais il ne duplique pas les tables.

Ce script est utiliser sur des horaires de transports publics.
Il y a toute une partie de gestion, création, qui fonctionne.
Lorsque le client modifie, c'est ok.
Tout se fait sur des tables dites "hors ligne". (Là, c'est ok)
Il doit ensuite mettre "en ligne" - grâce à ce script. Là ça bug.

Le résultat final est visible sur
http://www.vmcv.ch/content/grille/grill ... _Arret=102
(c'est le "en ligne" qui ne fonctionne pas)
http://www.vmcv.ch/content/grille/grill ... _Arret=102
(et le "hors ligne" qui fonctionne; la modification est sous 20h - dimanche - y'a plus le 22)

N'hésites pas à me dire si tu as besoin de plus d'info ;-)
Merci d'avance

ViPHP
AB
ViPHP | 5818 Messages

19 avr. 2010, 17:40

Ce ne serait pas une histoire de short tags en début de script ? Les shorts tags ne sont plus activés par défaut donc il faut écrire
<?php en lieu et place de <?
Ton problème (rien ne se passe) ressemble assez à ce qui se passe avec ce genre de pb.

Eléphanteau du PHP | 30 Messages

19 avr. 2010, 18:32

Merci pour l'idée!
Malheureusement j'ai bien le bon code au début....
Par contre - peut-être que cela peux vous mettre sur la piste - j'ai dû ajouter l'émulation des register_globals il y a une année...
J'ai fait un test en enlevant l'émulation: pas bon :-(
<?php
// Emulation de register_globals ?n
if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset($_SESSION)) {
array_unshift($superglobals, $_SESSION);
}
foreach ($superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);
}
ini_set('register_globals', true);

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2010, 02:32

Malheureusement j'ai bien le bon code au début....
Ce n'est pas qu'au début mais partout dans le code qu'il ne faut pas utiliser les short tags.
Cela dit si les balises sont écrites correctement au début, il y a de fortes chances qu'elles le soient aussi dans le reste du code. Mais bon c'est facile à vérifier.

Pour le reste j'ai pas d'idée sauf se mettre en mode debug :

Par exemple tu mets un echo 'condition 1 ok' juste après une condition pour voir si le code entre ou non dans la condition. Tu finiras bien par trouver l'origine du pb avec cette méthode. Fait aussi afficher tes variables pour voir ce qu'elles contiennent. Isoles certaines parties de ton code etc.

ViPHP
ViPHP | 5462 Messages

20 avr. 2010, 10:05

et ta bien les erreur d'activer ?

Code : Tout sélectionner

display_errors = On error_reporting = E_ALL | E_STRICT

Eléphanteau du PHP | 30 Messages

20 avr. 2010, 14:23

Bon ben voilà, le mystère est résolu.

En fait, il ne s'agit pas d'une erreur de script, mais simplement la memory_limit du serveur qui ne suit plus (en effet, le contenu des tables est assez impressionnant...).

J'ai trouvé cela en étudiant les données côté serveur, et sur la variable Innobd_buffer_pool_reads, y'a pas photo :-(

Merci encore pour votre aide
:-)

PS: pour les erreurs, j'ai la ligne
$result = mysql_query($qry, $myDB) or die("Invalid query: " . mysql_error());
Mais en fait, aucune erreur ne sortait, à cause de la variable ci-dessus qui fait la lecture directe de la page :-(

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2010, 17:06

Ah oui fallait y penser.
Si ça vient du memory_limit suite à une maj du serveur, c'est sans doute qu'il n'accepte pas par défaut la modification du phpini que les concepteurs du programme avaient peut-être augmentés...

Un petit résolu sur ton message pour dire que ce topic contient une solution ?