2012-01-04 13 views
10

Moví una aplicación de un servidor Ubuntu 11.04 (Natty Narwhal) a un servidor Red Hat Enterprise Linux (RHEL) durante el fin de semana. Mi registro de errores está lleno de los errores de PHP en la línea de asunto que hacen referencia a la siguiente función:Inesperado T_PAAMAYIM_NEKUDOTAYIM, esperando T_NS_Separator

function wfTalkHereArticleFromTitle(&$title, &$article) { 
    global $wgRequest, $wgTalkHereNamespaces; 

    if (isset($title->noTalkHere)) 
     return true; //Stop recursion 

    $action = $wgRequest->getVal('action' ); 
    $oldid  = $wgRequest->getVal('oldid' ); 
    $diff  = $wgRequest->getVal('diff'  ); 

    if ($action == 'purge') 
     $action = NULL; //"purge" is not considered an action in this context 

    if ($action || $oldid || $diff) 
     return true; 

    $ns = $title->getNamespace(); 

    if (!Namespace::isTalk($ns) && Namespace::canTalk($ns) && $title->exists() 
     && (!$wgTalkHereNamespaces || in_array($ns, $wgTalkHereNamespaces))) { 

     $tns = Namespace::getTalk($ns); 
     $talk = Title::makeTitle($tns, $title->getDBKey()); 

     if ($talk && $talk->userCan('read')) { 
      $t = clone $title; 
      $t->noTalkHere = true; //Stop recursion 

      $a = MediaWiki::articleFromTitle($t); 
      $article = new TalkHereArticle($a, $talk); 
     } 
    } 
    return true; 
} 

El error se lanza en la declaración

If (!Namespace::isTalk($ns) 

. Este error es nuevo para mí. ¿Cómo podría resolverlo?

he cambiado el código erróneo a:

if (!Ns::isTalk($ns) && Ns::canTalk($ns) && $title->exists() 
    && (!$wgTalkHereNamespaces || in_array($ns, $wgTalkHereNamespaces))) { 

    $tns = Ns::getTalk($ns); 
    $talk = Title::makeTitle($tns, $title->getDBKey()); 

    if ($talk && $talk->userCan('read')) { 
     $t = clone $title; 
     $t->noTalkHere = true; //Stop recursion 

     $a = MediaWiki::articleFromTitle($t); 
     $article = new TalkHereArticle($a, $talk); 
    } 
} 
return true; 

Sería eso suficiente para corregir el error, al menos en este archivo?

+1

@Charles jeje el error no está escrito correctamente :-P – Neal

+1

Por cierto, el error es en realidad escrito "PAAMAYIM NEKUDOTAYIM" (útil para cuando busca en Google). Como menciona Neal, "PAAMAYIM NEKUDOTAYIM" es hebreo para doble colon (los autores originales de PHP eran israelíes). –

+1

Pfft, soy un facista de etiqueta, no un nazi de speeling. – Charles

Respuesta

23

Parece que su nuevo servidor ejecuta PHP 5.3, mientras que el anterior ejecutaba una versión anterior.

En PHP 5.3, namespace es una palabra clave, gracias a new namespace feature.

Deberá cambiarse el nombre de su clase existente Namespace. El error de análisis se produce cuando el código intenta resolver Namespace::isTalk() en un nombre de espacio de nombres. (La sintaxis para hacerlo sería algo parecido a namespace Foo, sino que se confunde al ver el operador :: resolución.)

+1

Bueno uno '+ 42'^_ ^ – Neal

Cuestiones relacionadas