8796 sujets

Développement web côté serveur, CMS

Bonjours Alsacreations,
j'ai réalisé une fonction php qui se connecte automatiquement à ma base de données :

// en local :
$host="localhost";
$username="root";
$pass="";
$bddname="bdd_cascadeur";

function bdd($host,$username,$pass,$bddname){
  mysql_connect($host,$username,$pass) or die ("<b>Impossible de se connecter au serveur MYSQL</b>");
  mysql_select_db($bddname) or die ("<b>Impossible de sélectionner la base de données $bddname</b>");
}

bdd($host,$username,$pass,$bddname);


En local tout fonctionne comme prévu et ca marche, mais une fois que j'essaye de mettre en ligne.. la function bdd() est indéfinie! (Call to undefined function bdd() )
Comment est ce que c'est possible ?
Modifié par ghijselinck (08 Nov 2008 - 14:53)
Salut,

je ne vois pas pourquoi ça ne marcherait pas... Smiley rolleyes

Tu pourrais nous montrer un peu plus de code ?
Bonjour Heyoan,
je vais vous faire un petit récapitulatif du fonctionnement de ce code..

1. index.php

include("str_a.php");
 getPage();
 admin();
include("str_b.php");


2. str_a.php:

session_start();
 include("config.php");
 include("functions.php");
bdd($host,$username,$pass,$bddname);

echo "<html> \n";
echo "<head> \n";
echo "etc..\n";


3. config.php (ici je mets mes coordonnées en local mais quand je dois mettre en ligne je change mes données.)

$host="localhost";
$username="root";
$pass="";
$bddname="bdd_cascadeur";


4. functions.php:

function bdd($host,$username,$pass,$bddname){
  mysql_connect($host,$username,$pass) or die ("<b>Impossible de se connecter au serveur MYSQL</b>");
  mysql_select_db($bddname) or die ("<b>Impossible de sélectionner la base de données $bddname</b>");
}

function getPage([i]Je n'affiche pas tout..trop long[/i]);

function admin([i]Je n'affiche pas tout..trop long[/i]);



5. str_b.php:

echo "</html> \n";


Je ne comprends vraiment pas le problème, je me demande si mon serveur est capable de lire toutes mes tables dans ma base de données. Il faut dire qu'il y a 25 tables sur une seule base de données. Enfin, je suis perplexe car j'ai d'autre site avec le même bout de script, même serveur et sur la même base de données! Smiley biggol
Ben 25 tables ça n'a rien de démesuré...

J'étais déjà tombé sur des articles traitant de "Call to undefined function mysql_connect()" qui était lié à un passage de PHP4 à PHP5 mais si tu te sers du même code ailleurs je ne vois pas de raison.

Je sèche. Smiley hmm


Edit: à moins que la page functions.php ne soit pas incluse pour une raison ou pour une autre. Tu pourrais vérifier les noms et les chemins et/ou remplacer include par require_once pour être sûr.
Modifié par Heyoan (07 Nov 2008 - 15:43)
Heyoan a écrit :

Je sèche. Smiley hmm

Smiley biggol Moi aussi !
J'ai essayé en remplaçant les include par des require_once, l'arborescence de l'appel des différents scripts est correcte, j'ai même essayé sur un autre serveur avec les même tables..rien y fait, l'erreur est pertinente!!

Voici le message d'erreur original :
[b]Fatal error:[/b] Call to undefined function bdd() in /customers/ghijselinck.com/ghijselinck.com/httpd.www/MyWebs/cascadeur/str_a.php on line 6

ligne 6 sur le fichier str_a.php, erreur de l'appel à la fonction bdd()

Je ne comprends vraiment pas pourquoi en local ça fonctionne mais pas sur le net. Smiley bawling
2 suggestions (stupides) pour faire avancer le shmilblick :

* renommer ta fonction en bbdbis (des fois que bdd serait un mot clé réservé Smiley rolleyes )

* ne pas faire appel à la fonction mais faire directement le mysql_connect et le mysql_select_db pour voir...
Modifié par Heyoan (07 Nov 2008 - 17:37)
De toute façons:

- Pour que ta page fonctionne, tu es obligé d'avoir le fichier, utilise donc "require"
- Pour ne pas avoir deux fois la même fonction définie lors d'inclusions multiples, utilise "once"

Donc, même si cela ne change rien, préfère utiliser "require_once" à "include" ici Smiley cligne

Ensuite, quelles sont les version de php sur ton serveur local et sur le distant?
J'ai essayé de renommer la fonction, toujours rien donc le nom bdd() pour ma fonction n'est pas un nom réservé.

J'ai également essayé de mettre directement la connexion au serveur sur str_a.php. Rien à faire il butte sur la première fonction rencontré sur la page functions.php..donc cette fois ci c'est la fonction getPage() qui est indéfinie. Smiley eek

C'est possible que mon fichier functions.php soit illisible par les deux serveurs que j'ai essayé, et lisible en local (wamp) ..?
Hum, peut être une histoire de chmod? O_o mais ca me paraitrait gros quand même...
ghijselinck a écrit :

C'est possible que mon fichier functions.php soit illisible par les deux serveurs que j'ai essayé, et lisible en local (wamp) ..?
Peut-être un caractère (BOM ?) qui traine...
Calak a écrit :

quelles sont les version de php sur ton serveur local et sur le distant?

en local:
La version du serveur: 5.0.51b-community-nt
La version du client MySQL : 5.0.51a

sur le net :
La version du serveur: 5.0.32-Debian_7etch6-log
La version du client MySQL: 5.0.32

Heyoan a écrit :

Peut-être un caractère (BOM ?) qui traine...

Je ne connait pas les caractères BOM.. j'essaie de me documenté mais j'avoue que je suis totalement perdu! Est ce que ces caractères BOM sont visible dans mon éditeur de texte PsPad? Et comment ce seront elles ajouter à mon code..inattention de ma part? Peut être réviser tout mon code apres ces caractères BOM?? Smiley confused
Définition de la BOM dans ce post (invisible à l'oeil nu Smiley langue ).

Au final ton code "effectif" devient
function bdd...
ce qui expliquerait pourquoi la première fonction n'est pas reconnue.
Calak a écrit :
Et tu as essayé de changer les droits du fichier fonctions.php ?

Oui... ils sont tous sur CHMOD 755
Je vais voir les caractères BOM..
Et ça a l'air con, mais si dans ton fichier "fonctions.php" tu rajoute au début:
echo '#######DEBUG BEGIN#########';

Et à la fin:
echo '#######DEBUG END#########';


Tes deux echo s'affichent?
Bonjour à tous!

Bon j'ai essayer pas mal de choses, j'ai finalement trouver une solution temporaire: j'ai copier tout le code de la page functions.php sur la page config.php et sa marche! Smiley cligne Ainsi la page functions.php n'est plus utiliser et j'ai bien évidement enlevé le require sur la page str_a.php.

Maintenant une question qui me rend Smiley biggol , comment savoir si le fichier "functions.php" n'est pas rempli de caractères BOM ou autres.. J'ai vérifier que mon éditeur de texte (psPad) ne mette pas d'Octets de signature en code UTF-8 sur mes pages mais sa n'empêche pas de faire planter la page functions.php. Smiley ohwell
ghijselinck a écrit :

Maintenant une question qui me rend Smiley biggol , comment savoir si le fichier "functions.php" n'est pas rempli de caractères BOM ou autres.. J'ai vérifier que mon éditeur de texte (psPad) ne mette pas d'Octets de signature en code UTF-8 sur mes pages mais sa n'empêche pas de faire planter la page functions.php. Smiley ohwell

Alors la bonne nouvelle c'est qu'il est impossible qu'il soit rempli de caractères BOM puisque ce ne sera qu'au tout début du fichier. Smiley langue

Sinon on trouve dans les options des éditeurs gérant la BOM la possibilité de l'utiliser ou non et pour tester une page tu peux utiliser l'outil de ce site.

En tous cas ça ressemble bien aux symptômes...
Modifié par Heyoan (08 Nov 2008 - 14:28)
Bon, mes constatations :
L'ancien fichier "functions.php" à du être infecté par quelque chose mais je ne sais pas quoi. J'ai résolu mon problème tout simplement en copiant son code vers une nouvelle page. Je l'ai nommé functions.php afin d'être certain à 100% de ne pas être en conflit avec un nom de fichier réservé sur un de mes serveurs. Et ça fonctionne! Donc voila, mon fichier à du simplement être infecté et devenu illisible pour mes serveurs mais pas pour wamp Smiley langue

En tous cas merci pour votre aide Smiley cligne