2009-10-14 7 views
4

Avec PHP 5.3.0.Erreur pointant vers "ligne 0" dans PHP

Je sais que vous pouvez obtenir des erreurs pointant vers la ligne 0 lors de l'exécution du code à partir du shell (avec php -a ou php -r). Je sais également que vous pouvez obtenir des erreurs de ligne 0 lorsqu'une exception est levée pendant le processus d'exécution d'un gestionnaire d'exceptions personnalisé. Ce sont des raisons logiques pour lesquelles PHP ne peut pas me fournir un numéro de ligne pour une erreur. Mais maintenant j'obtiens des erreurs de ligne 0 même si je ne fais pas l'une ou l'autre de ces deux autres choses. Ce genre de chose:

Fatal error: Call to a member function items() on a non-object in /Users/ole/pap/gtd/fu/lib/tree.php on line 0

Je ne demande pas de l'aide de débogage mon code ici juste pour la raison pour laquelle PHP pourrait ne pas être me donner un numéro de ligne approprié pour ces erreurs. Quoi qu'il en soit, cette dernière erreur s'est avérée être sur la ligne 237 (juste un simple cas de non variable orthographié incorrectement).

Donc ce que j'ai fait a été délibérément réintroduit l'erreur et mis en appel au debug_print_backtrace(). Voici ce que je suis:

#0 FuTreeSerializer->serialize(FuLinkedTreeNodeList Object ([outer] => ,[items] => Array ([0] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => bar,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => zim,[next] => ,[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => ,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[1] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => bar,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => zim,[next] => ,[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object (*RECURSION*,[prev] => ,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[2] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => zim,[next] => ,[prev] => FuTreeNode Object (*RECURSION*,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => bar,[next] => FuTreeNode Object (*RECURSION*,[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object (*RECURSION*,[prev] => ,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[3] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => zim,[next] => ,[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object (*RECURSION*,[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => bar,[next] => FuTreeNode Object (*RECURSION*,[prev] => FuTreeNode Object ([outer] => ,[inners] => FuLinkedTreeNodeList Object ([outer] => FuTreeNode Object (*RECURSION*,[items] => Array()),[value] => foo,[next] => FuTreeNode Object (*RECURSION*,[prev] => ,[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*),[ofList] => FuLinkedTreeNodeList Object (*RECURSION*))), -1) called at [/Users/ole/pap/gtd/fu/lib/tree.php:128] 
#1 FuLinkedTreeNodeList->asStr() called at [/Users/ole/pap/gtd/fu/spec/tree.php:52] 
#2 FuTreeNodeSpec->_select() 
#3 ReflectionMethod->invoke(FuTreeNodeSpec Object ([methodPatterns] => Array ([run] => /^_/,[skip] => /^skip/i),[specCallTrace] => Array ([0] => Array ([function] => __call,[class] => PweVerifierInjecter,[object] => PweVerifierInjecter Object ([spec] => FuTreeNodeSpec Object (*RECURSION*,[subj] => 1),[type] => ->,[args] => Array ([0] => shouldBe,[1] => Array ([0] => 1))),[1] => Array ([file] => /Users/ole/pap/gtd/fu/spec/tree.php,[line] => 47,[function] => shouldBe,[class] => PweVerifierInjecter,[object] => PweVerifierInjecter Object ([spec] => FuTreeNodeSpec Object (*RECURSION*,[subj] => 1),[type] => ->,[args] => Array ([0] => 1)),[2] => Array ([function] => _list_equality,[class] => FuTreeNodeSpec,[object] => FuTreeNodeSpec Object (*RECURSION*,[type] => ->,[args] => Array()),[3] => Array ([file] => /Users/ole/pap/gtd/fu/lib/pwe.php,[line] => 187,[function] => invoke,[class] => ReflectionMethod,[object] => ReflectionMethod Object ([name] => _list_equality,[class] => FuTreeNodeSpec),[type] => ->,[args] => Array ([0] => FuTreeNodeSpec Object (*RECURSION*)),[4] => Array ([file] => /Users/ole/pap/gtd/fu/lib/pwe.php,[line] => 192,[function] => each,[class] => PweSpec,[object] => FuTreeNodeSpec Object (*RECURSION*,[type] => ->,[args] => Array ([0] => ReflectionMethod Object ([name] => _list_equality,[class] => FuTreeNodeSpec))),[5] => Array ([file] => /Users/ole/pap/gtd/fu/lib/pwe.php,[line] => 207,[function] => runMethods,[class] => PweSpec,[object] => FuTreeNodeSpec Object (*RECURSION*,[type] => ->,[args] => Array()),[6] => Array ([file] => /Users/ole/pap/gtd/fu/lib/pwe.php,[line] => 35,[function] => run,[class] => PweSpec,[object] => FuTreeNodeSpec Object (*RECURSION*,[type] => ->,[args] => Array ([0] => PweTracker Object ([passes] => 33,[failures] => 0,[skips] => 0))),[7] => Array ([file] => /Users/ole/pap/gtd/fu/-,[line] => 4,[function] => runDefined,[class] => PweRunner,[object] => PweRunner Object ([specPattern] => /Spec$/i),[type] => ->,[args] => Array())),[tracker] => PweTracker Object ([passes] => 33,[failures] => 0,[skips] => 0),[activeMethod] => ReflectionMethod Object ([name] => _select,[class] => FuTreeNodeSpec))) called at [/Users/ole/pap/gtd/fu/lib/pwe.php:187] 
#4 PweSpec->each(ReflectionMethod Object ([name] => _select,[class] => FuTreeNodeSpec)) called at [/Users/ole/pap/gtd/fu/lib/pwe.php:192] 
#5 PweSpec->runMethods() called at [/Users/ole/pap/gtd/fu/lib/pwe.php:207] 
#6 PweSpec->run(PweTracker Object ([passes] => 33,[failures] => 0,[skips] => 0)) called at [/Users/ole/pap/gtd/fu/lib/pwe.php:35] 
#7 PweRunner->runDefined() called at [/Users/ole/pap/gtd/fu/-:4] 

Si vous faites défiler vers la droite là, vous verrez qu'il ya des charges de récursion mes structures de données (ce qui est à prévoir avec le code je travaille). Mais sinon ce n'est pas une pile particulièrement longue. Après un google autour j'ai réussi à trouver some guy's error log qui semble avoir le même problème.

J'ai essayé de rechercher des informations à ce sujet sur les bogues PHP, mais le système de recherche n'est pas assez puissant pour me permettre de rechercher "on line 0" sans vouloir omettre certains des termes; importants.

+0

Avez-vous ce problème uniquement sur ce script particulier, je dirais qu'une extension ne se charge pas correctement, mais cela affecterait votre installation entière .. – RageZ

+0

Que voulez-vous dire par codé les pages? –

+0

@RageZ: Le problème ne se produit que sur ce script particulier, oui. –

Répondre

0

Il semble qu'il y ait une erreur dans le destructeur. Pour le trouver, je recommanderais de convertir les erreurs en exceptions (ErrorException, voir le manuel php)/

Questions connexes