probleme capricieux de : Call to a member function on a non-object
12 réponses
ownowl
bonjour à tous
J'ai une application qui communique par ajax avec son serveur, et une
des fonctionnalité de cette aplic est de se voir retourner par le
serveur un fichier .rtf construit à la volée.
Pour compléter le fichier rtf j'utilise des données d'un objet
sauvegardé dans la session utilisateur, et que lorsque je fait appel à
une méthode de cette object j'obtient : Call to a member function
mafonction() on a non-object in nomdufichier.php
ce qui me parrait trés bizare :
- si je fais un error_log($monobjet->malethode()), la valeur est
correcte dans le fichier log. (avec l'erreur sur le client)
- la page est chargée par un window.open(monUrl). Si je ne charge pas
dans une nouvelle fenêtre de navigateur, ca fonctionne.
- le problème apparait uniquement avec IE et pas avec Firefox
J'ai une application qui communique par ajax avec son serveur, et une des fonctionnalité de cette aplic est de se voir retourner par le serveur un fichier .rtf construit à la volée.
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut inclure la définition de la classe avant de désérialiser un objet, faute de quoi l'interpréteur génère cette erreur.
bonjour à tous
J'ai une application qui communique par ajax avec son serveur, et une
des fonctionnalité de cette aplic est de se voir retourner par le
serveur un fichier .rtf construit à la volée.
Pour compléter le fichier rtf j'utilise des données d'un objet
sauvegardé dans la session utilisateur, et que lorsque je fait appel à
une méthode de cette object j'obtient : Call to a member function
mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut
inclure la définition de la classe avant de désérialiser un objet, faute
de quoi l'interpréteur génère cette erreur.
J'ai une application qui communique par ajax avec son serveur, et une des fonctionnalité de cette aplic est de se voir retourner par le serveur un fichier .rtf construit à la volée.
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut inclure la définition de la classe avant de désérialiser un objet, faute de quoi l'interpréteur génère cette erreur.
ownowl
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut inclure la définition de la classe avant de désérialiser un objet, faute de quoi l'interpréteur génère cette erreur.
merci de ta réponse
effectivement, j'ai déjà rencontré ce problème, mais là ce n'est pas le cas, la classe est bien inclue au préalable. Et dans ce cas l'erreur serait la même quelque soit le navigateur a+
Pour compléter le fichier rtf j'utilise des données d'un objet
sauvegardé dans la session utilisateur, et que lorsque je fait appel à
une méthode de cette object j'obtient : Call to a member function
mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut
inclure la définition de la classe avant de désérialiser un objet, faute
de quoi l'interpréteur génère cette erreur.
merci de ta réponse
effectivement, j'ai déjà rencontré ce problème, mais là ce n'est pas le
cas, la classe est bien inclue au préalable.
Et dans ce cas l'erreur serait la même quelque soit le navigateur
a+
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Je ne sais pas ce qu'il en est pour php5, mais pour php4, il faut inclure la définition de la classe avant de désérialiser un objet, faute de quoi l'interpréteur génère cette erreur.
merci de ta réponse
effectivement, j'ai déjà rencontré ce problème, mais là ce n'est pas le cas, la classe est bien inclue au préalable. Et dans ce cas l'erreur serait la même quelque soit le navigateur a+
Pascal PONCET
- le problème apparait uniquement avec IE et pas avec Firefox
Salut, Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est sûrement un problème de cache. Je pense que tu es en phase de développement, avec PHP sur ton poste et non pas sur un serveur distant, vrai ? Pascal
- le problème apparait uniquement avec IE et pas avec Firefox
Salut,
Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est
sûrement un problème de cache.
Je pense que tu es en phase de développement, avec PHP sur ton poste et
non pas sur un serveur distant, vrai ?
Pascal
- le problème apparait uniquement avec IE et pas avec Firefox
Salut, Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est sûrement un problème de cache. Je pense que tu es en phase de développement, avec PHP sur ton poste et non pas sur un serveur distant, vrai ? Pascal
ownowl
Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est sûrement un problème de cache. Je pense que tu es en phase de développement, avec PHP sur ton poste et non pas sur un serveur distant, vrai ?
exact, mais je viens de faire des tests depuis un autre poste avec IE et Firefox, c'est pareil.
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
merci et a+
Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est
sûrement un problème de cache.
Je pense que tu es en phase de développement, avec PHP sur ton poste et
non pas sur un serveur distant, vrai ?
exact, mais je viens de faire des tests depuis un autre poste avec IE et
Firefox, c'est pareil.
pour info et si ca peut aider, je place :
header('Content-type: application/msword');
dans l'entête
Si tu as une erreur PHP avec un client HTTP et pas avec l'autre, c'est sûrement un problème de cache. Je pense que tu es en phase de développement, avec PHP sur ton poste et non pas sur un serveur distant, vrai ?
exact, mais je viens de faire des tests depuis un autre poste avec IE et Firefox, c'est pareil.
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
merci et a+
Bruno Baguette
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai pas creusé la différence entre les deux plus que ca.
-- Bruno Baguette -
pour info et si ca peut aider, je place :
header('Content-type: application/msword');
dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai
pas creusé la différence entre les deux plus que ca.
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai pas creusé la différence entre les deux plus que ca.
-- Bruno Baguette -
Gromitt
On 24 avr, 15:14, ownowl wrote:
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Cette erreur signifie que ta variable n'est pas un objet, mais autre chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue')) { // erreur }
Il est possible que tu doives inclure le code de ta classe avant toute autre manipulation; si tu ressors un objet sérialisé de ta session et que sa définition n'est pas chargée, cela peut créer des situations problématiques comme celle que tu viens de décrire.
On 24 avr, 15:14, ownowl <own...@club-internet.fr> wrote:
Pour compléter le fichier rtf j'utilise des données d'un objet
sauvegardé dans la session utilisateur, et que lorsque je fait appel à
une méthode de cette object j'obtient : Call to a member function
mafonction() on a non-object in nomdufichier.php
Cette erreur signifie que ta variable n'est pas un objet, mais autre
chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire
le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue'))
{
// erreur
}
Il est possible que tu doives inclure le code de ta classe avant toute
autre manipulation; si tu ressors un objet sérialisé de ta session et
que sa définition n'est pas chargée, cela peut créer des situations
problématiques comme celle que tu viens de décrire.
Pour compléter le fichier rtf j'utilise des données d'un objet sauvegardé dans la session utilisateur, et que lorsque je fait appel à une méthode de cette object j'obtient : Call to a member function mafonction() on a non-object in nomdufichier.php
Cette erreur signifie que ta variable n'est pas un objet, mais autre chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue')) { // erreur }
Il est possible que tu doives inclure le code de ta classe avant toute autre manipulation; si tu ressors un objet sérialisé de ta session et que sa définition n'est pas chargée, cela peut créer des situations problématiques comme celle que tu viens de décrire.
ownowl
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai pas creusé la différence entre les deux plus que ca.
j'ai essayé les deux : application/rtf et txt/rtf et IE me retourne un message modal : Internet Explorer ne peut pas télécharger controler.php de localhost. Internet explorer n'as pas pus ouvrir ce site internet. le site n'est pas disponible...
par contre avec firefox ca fonctionne très bien a+ Olivier
pour info et si ca peut aider, je place :
header('Content-type: application/msword');
dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai
pas creusé la différence entre les deux plus que ca.
j'ai essayé les deux : application/rtf et txt/rtf et IE me retourne un
message modal :
Internet Explorer ne peut pas télécharger controler.php de localhost.
Internet explorer n'as pas pus ouvrir ce site internet. le site n'est
pas disponible...
par contre avec firefox ca fonctionne très bien
a+
Olivier
pour info et si ca peut aider, je place : header('Content-type: application/msword'); dans l'entête
Est-ce que application/rtf ne serait pas plus indiqué, comme header ?
Pour info, je vois qu'il existe aussi text/rtf visiblement, mais je n'ai pas creusé la différence entre les deux plus que ca.
j'ai essayé les deux : application/rtf et txt/rtf et IE me retourne un message modal : Internet Explorer ne peut pas télécharger controler.php de localhost. Internet explorer n'as pas pus ouvrir ce site internet. le site n'est pas disponible...
par contre avec firefox ca fonctionne très bien a+ Olivier
ownowl
Cette erreur signifie que ta variable n'est pas un objet, mais autre chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue')) { // erreur }
Il est possible que tu doives inclure le code de ta classe avant toute autre manipulation; si tu ressors un objet sérialisé de ta session et que sa définition n'est pas chargée, cela peut créer des situations problématiques comme celle que tu viens de décrire.
La méthode passe très bien les tests que tu décrit au dessus. Et les appels de méthode sur l'objet fonctionne aussi très bien, sauf qu'avec IE on a des messages d'erreur. a+
Cette erreur signifie que ta variable n'est pas un objet, mais autre
chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire
le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue'))
{
// erreur
}
Il est possible que tu doives inclure le code de ta classe avant toute
autre manipulation; si tu ressors un objet sérialisé de ta session et
que sa définition n'est pas chargée, cela peut créer des situations
problématiques comme celle que tu viens de décrire.
La méthode passe très bien les tests que tu décrit au dessus. Et les
appels de méthode sur l'objet fonctionne aussi très bien, sauf qu'avec
IE on a des messages d'erreur.
a+
Cette erreur signifie que ta variable n'est pas un objet, mais autre chose. Assure toi qu'il s'agit bien de l'objet attendu avant de faire le moindre traitement :
$obj = $_SESSION['obj']; // exemple de generation d'objet
if (!is_object($obj) || is_a($obj, 'classe_attendue')) { // erreur }
Il est possible que tu doives inclure le code de ta classe avant toute autre manipulation; si tu ressors un objet sérialisé de ta session et que sa définition n'est pas chargée, cela peut créer des situations problématiques comme celle que tu viens de décrire.
La méthode passe très bien les tests que tu décrit au dessus. Et les appels de méthode sur l'objet fonctionne aussi très bien, sauf qu'avec IE on a des messages d'erreur. a+
Fredchou
ce qui me parrait trés bizare : - si je fais un error_log($monobjet->malethode()), la valeur est correcte dans le fichier log. (avec l'erreur sur le client) - la page est chargée par un window.open(monUrl). Si je ne charge pas dans une nouvelle fenêtre de navigateur, ca fonctionne. - le problème apparait uniquement avec IE et pas avec Firefox
Je n'ai pas tout compris mais est-ce que ça ne viendrait pas d'un mauvais passage de l'identifiant de session ? (par cookie ou paramètre GET) -- Fredchou mailto:
ce qui me parrait trés bizare :
- si je fais un error_log($monobjet->malethode()), la valeur est correcte
dans le fichier log. (avec l'erreur sur le client)
- la page est chargée par un window.open(monUrl). Si je ne charge pas dans
une nouvelle fenêtre de navigateur, ca fonctionne.
- le problème apparait uniquement avec IE et pas avec Firefox
Je n'ai pas tout compris mais est-ce que ça ne viendrait pas d'un mauvais
passage de l'identifiant de session ? (par cookie ou paramètre GET)
--
Fredchou
mailto:fredchou@nospam.free.fr.invalid
ce qui me parrait trés bizare : - si je fais un error_log($monobjet->malethode()), la valeur est correcte dans le fichier log. (avec l'erreur sur le client) - la page est chargée par un window.open(monUrl). Si je ne charge pas dans une nouvelle fenêtre de navigateur, ca fonctionne. - le problème apparait uniquement avec IE et pas avec Firefox
Je n'ai pas tout compris mais est-ce que ça ne viendrait pas d'un mauvais passage de l'identifiant de session ? (par cookie ou paramètre GET) -- Fredchou mailto:
Yanick
Si tu utilise des Cookies, IE ne gère pas plus que 20 cookies à la fois (ou un autre nombre arbitraire de la sorte). Sous FF, pas de problème, mais sous IE, le 21e Cookie écrasera le permier (PHPSESSID) se qui te fera perdre ta session. Si c'est le cas, alors je te suggère de sérialiser tes cookies pour n'en faire qu'un seul... J'ai eu ce genre de problème il y a peu de temps et ça l'a réglé.
-yanick
Si tu utilise des Cookies, IE ne gère pas plus que 20 cookies à la
fois (ou un autre nombre arbitraire de la sorte). Sous FF, pas de
problème, mais sous IE, le 21e Cookie écrasera le permier (PHPSESSID)
se qui te fera perdre ta session. Si c'est le cas, alors je te suggère
de sérialiser tes cookies pour n'en faire qu'un seul... J'ai eu ce
genre de problème il y a peu de temps et ça l'a réglé.
Si tu utilise des Cookies, IE ne gère pas plus que 20 cookies à la fois (ou un autre nombre arbitraire de la sorte). Sous FF, pas de problème, mais sous IE, le 21e Cookie écrasera le permier (PHPSESSID) se qui te fera perdre ta session. Si c'est le cas, alors je te suggère de sérialiser tes cookies pour n'en faire qu'un seul... J'ai eu ce genre de problème il y a peu de temps et ça l'a réglé.