2010-03-06 7 views
2

J'ai quelques pages, qui fonctionnent bien localement (en utilisant WAMP et error_reporting E_ALL dans php.ini), mais une fois que je les télécharge, j'obtiens l'erreur suivante: Erreur fatale: Appel à la méthode non définie DB :: exists() La méthode est là, et je ne sais pas pourquoi on ne peut pas la voir.PHP Erreur irrécupérable: Appel à la méthode non définie après le téléchargement sur le web

Avez-vous une idée de ce qui s'est passé?

+0

Il est très probable qu'une bibliothèque ou une extension ne soit pas installée sur le serveur. S'il vous plaît montrez du code, et si possible les numéros de version de PHP qui appellent 'phpinfo()' vous donne sur le serveur et localement. –

+0

Local vs Serveur = PHP 5.3.0 vs. PHP 5.2.5. Toutes les classes (y compris DB) sont chargées via __autoload() et requises en tant que composant dans chaque page. J'ai essayé de remplacer __autoload par des instructions single require_once pour toutes les classes, mais cela n'a pas résolu le problème. DB :: exists() est appelé statiquement d'une autre classe (Visitor). – user287966

Répondre

0

Non, la méthode n'existe pas. Le plus tôt vous apprenez à faire confiance aux messages d'erreur, le plus tôt vous obtenez votre application à travailler.

+0

Bien que cela soit vrai, cela n'aide personne. – Dolph

+0

certainement pas une réponse. probablement plus adapté pour être un commentaire. – mauris

+0

en fait c'est plus que de répondre. Faire confiance à vos yeux est la première chose à apprendre en programmation –

0

Vous avez probablement installé pear et quelques bibliothèques ailleurs que votre code de site Web. Vérifiez où les points que vous incluez dans php.ini et téléchargez-le aussi.

0

Vous souhaitez probablement vérifier la configuration php.ini du serveur Web par rapport à votre php.ini local pour voir si des modules non chargés sur le serveur Web peuvent être requis dans votre application PHP.

Vérifiez également les numéros de version de PHP sur votre serveur Web et votre code PHP local, ainsi que sur le Web pour connaître les limites de votre version de PHP.

1

Essayez de mettre une instruction de débogage dans le fichier qui définit class DB et DB::exists(), tels que:

echo "DB file was included\n"; 

Est-ce que ce message apparaît? Sinon, le fichier n'est pas inclus, ce qui explique pourquoi la méthode n'est pas trouvée.

Trouver le lieu où ce fichier est censé être obtenir inclus, et examiner le chemin d'inclusion au point:

echo "Include path is: " . get_include_path() . "\n"; 

Est-ce que un autre fichier avec le même nom existe dans l'un des autres répertoires listés dans le chemin d'inclusion? Si oui, vous devrez peut-être modifier l'autre des entrées dans votre chemin d'inclusion (qui est défini par include_path dans php.ini, mais peut également être édité à l'exécution avec set_include_path())

0

Le serveur a installé Pear :: DB (http://pear.php.net/package/DB/redirected). Votre fonction de chargement automatique charge la classe DB de Pear à la place de la vôtre.

Si vous avez le contrôle sur le serveur, quelque chose comme cela devrait fonctionner

$ sudo pear uninstall DB 

Si vous ne disposez pas de contrôle sur le serveur, vous devrez renommer votre classe DB à autre chose ...

Vous pouvez modifier le include_path pour charger les classes PEAR après vos propres classes, mais cela pourrait entraîner d'autres conflits de nommage.

Questions connexes