Jump to content

Adaptation d'un module pour PHP 5.3+


seboss666

Recommended Posts

Bonjour à tous,

voilà, j'ai en charge le site de ma team sur lequel un module pour gérer les matches est intégré. Ce site est hébergé sur un mutu pro OVH, et récemment ils ont lancé la possibilité d'utiliser php-fpm. Ca rox du poney comme il faut, mais la version de php exécutée est différente, et apparemment celle-ci n'aime pas la façon dont est codée le module.

Le problème c'est que le développeur a arrêté de travailler dessus, et que du coup, je lis une soupe mélangeant allègrement affichage, connexion bdd, fonctions php, le tout dans une absence de documentation quasi totale. Je me retrouve donc bloqué à ma première erreur :

Fatal error: Cannot redeclare lcfirst() in /homez.540/clantoc/www/vwar/includes/functions_common.php on line 534

Génial, sauf qu'à rechercher la chaine de définitions de fonctions, déjà la ligne 534 indique la fin de la fonction et pas son début, et surtout c'est la première apparition de la fonction, j'ai donc du mal à comprendre comment il peut dire que je la redéclare. Comment c'est possible ?


Par ailleurs, le développeur a une façon bizarre d'écrire son code. J'entends par là qu'il a ajouté des espaces un peu partout là où j'aurais plutôt tendance à éviter. Voici un bout de code pour bien comprendre :

(...)
## -------------------------------------------------------------------------------------------------------------- ##
function strip_slashes (&$arg)
{
	if (is_string($arg))
	{
		return stripslashes($arg);
	}
	else
	{
		$arg = dbSelectArray ($arg, 1, 0, 1, 0);
		return $arg;
	}
}
## -------------------------------------------------------------------------------------------------------------- ##
function rehtmlspecialchars($arg)
{
	$arg = str_replace ("<", "<", $arg);
	$arg = str_replace (">", ">", $arg);
	$arg = str_replace (""", "\"", $arg);
	$arg = str_replace ("&", "&", $arg);

	return $arg;
}
## -------------------------------------------------------------------------------------------------------------- ##
function vstripos($haystack, $needle, $offset = 0)
{
	// same as strpos, but non-case sensitive
	$foundstring = stristr(substr($haystack, $offset), $needle);
	return ($foundstring === false) ? false : strlen($haystack) - strlen($foundstring);
}
## -------------------------------------------------------------------------------------------------------------- ##
function lcfirst ( $str )
{
	$str[0] = strtolower ( strtr( $str[0], "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝ", "àáâãäåçèéêëìíîïñòóôõöøùúûüý" ) );
	return $str;
}
## -------------------------------------------------------------------------------------------------------------- ##
(...)

Vous remarquerez la grande qualité des commentaires. Non pas que je ne sache pas lire le PHP (je ne m'attaquerais pas à sa mise à jour si ce n'était pas le cas), mais le fait d'espacer la liste des paramètres lors de la définition de la fonction me parait bien étrange. A votre avis, ça peut être gênant pour les versions récentes de PHP (qui pourraient justement serrer la vis et donc provoquer des erreurs avec les codes mal conçus) ?

Link to comment
Share on other sites

Le coding style n'est même pas stable: dans le passage de paramètres un coup il y a des espaces un autre coup aucun.

Ainsi que le ligne vide avant un return.

:mad2::mad2:

Sinon un return dans un else c'est moche :roll:

Et enfin la documentation, on s'en fiche: les fonctions font au plus 3 lignes. Elles sont self-explicite :windu:

Sinon Cannot redeclare function php: as-tu essayé les 2-3 trucs?

  • Commenter entièrement la fonction lcfirst
  • utiliser include_once ou require_once
  • tester if (!function_exists('lcfirst'))
Link to comment
Share on other sites

Ben en fait j'ai lu dans la doc et ils ont ajouté la fonction dans php 5.3. Je pense donc que je vais ajouter le if (!function_exists('lcfirst')) et voir ce qui se passe en activant php_fpm.

EDIT (de Nantes) : Bon ben ça marche, maintenant j'ai juste la blinde d'erreurs "Deprecated" qu'il va falloir traiter, cool (y'a encore des "eregi" dans le code...).

Bon ben je vais carrément travailler sur une copie du module parce que c'est la misère le nombre de vieilles fonctions qui datent de PHP4. J'en ai pour un moment :craint:

Link to comment
Share on other sites

  • 4 weeks later...

Petit come back, maintenant que je vais me pencher sérieusement dessus. Existe-t-il des outils permettant d'assister dans la mise à jour vers une version plus récente de php, où à tout le moins permettant de scanner les fichiers pour pointer directement les fonctions obsolètes ? parce que là, j'en suis réduit à "j'ouvre une page, je regarde les erreurs si j'en vois, et je crois les doigts en modifiant la fonction". Pas forcément la meilleure méthode, notamment parce que je ne verrais pas forcément toutes les erreurs.

Et je me revois pas coder tout le bousin.

Link to comment
Share on other sites

Tu pourrais voir du coté du error_reporting dans le PHP.ini.

Je penses notamment à l'option E_DEPRECATED qui t'avertit à l'avance si une fonction est susceptible d'être retirée à l'avenir.

Par contre il faut tout de même parcourir tous les scripts pour voir ce qu'il ce passe. Je ne connais pas d'outil spécialement conçu pour ce genre de parcours. Éventuellement tu pourrais tester avec un aspirateur de site puis lire dans le logs mais c'est pas optimal et cela ne teste pas les formulaires ce qui est plutôt gênant.

Link to comment
Share on other sites

T'inquiète je déprime déjà à mort, j'ai du boulot. y'a pas mal de fichiers, et c'est un vrai bordel : routine d'affichage, fonctions d'appel à la base SQL, tests, tout est mélangé dans les (trop) nombreux fichiers du truc. Et je me vois pas recoder tout ça moi-même de zéro (surtout l'intégration à SMF, là je suis dans les choux).

J'ai quelques compétences en PHP, mais pas à ce point-là.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...