为什么在Joomla中调用新的类实例时会产生致命错误?

时间:2015-06-22 14:31:48

标签: php joomla fatal-error

我们公司的一个Web应用程序的功能最近停止正常工作。该应用程序是使用Joomla构建的。错误日志正在生成此致命错误:

PHP Fatal error:  Class 'getXML' not found in /var/www/mycompanysite.com/html/display/listener.php on line 5

这里讨论的代码块看起来像这样($ insert_sql是一个虚拟查询,仅用于测试,相同的致命错误,不存在此查询):

<?php
include("config.php");// $myVar = 4 in this file, test #1
include("message.class.php"); //$myVar = 5 in this file, separate test #2
$xml = $_REQUEST['messagelist'];
$insert_sql = mysql_query("insert into messages (message, pid) values ('".$myVar."','999999');");
$retrieverobj = new getXML($xml);

    // etc.   

文件config.php和message.class.php都与listener.php在同一个文件夹中(我已经更改了两个包括引用文件的绝对路径但结果相同),所以路径不应该是一个问题。我做了两次测试。在第一个测试(config.php)中,值4在脚本运行后出现在messages表(在消息列中)中,因此第一个包含适用于它的config.php。在第二个测试中,在脚本运行后不会出现值5(似乎插入了null),因此第二个包含似乎失败了。

我是Joomla的新手,所以我认为它可能有一些类命名约定(因为类名是getXML,文件名是message.class.php)。所以我在第二个包含声明中重试了这一行:

include("getXML.class.php"); //also tried as include("getXML.php"); 

但是导致同样的致命错误(我也尝试过而不是包括在内)。

这是有问题的类(我应该添加,当我甚至删除整个函数时,只有class getXML{}作为空类出现,致命错误仍然存​​在 ):

class getXML{

function getXML($incomingMessage){

    global $keyword, $phonenumber, $carriercode, $messagebody;

    $messagelist_xml = simplexml_load_string(stripslashes($incomingMessage));

    $from = urldecode($messagelist_xml->{'message-list'}->message->from);

    $messagebody = urldecode($messagelist_xml->{'message-list'}->message->body);

    $keywordarray=explode(" ",$messagebody);

    $keyword = $keywordarray[0];

    if($_GET['keyword'] != ''){

        $keyword = $_GET['keyword'];

    }

    $phonenumber= substr($from,-10);

    $carriercode= strstr($from, '=');
    $carriercode= substr($carriercode,1,5);

    }
}

关于这里发生了什么的任何想法?为什么第二个包括在这个Joomla网站上失败?

1 个答案:

答案 0 :(得分:0)

我不确定您是否可以使用相同的类名和函数名称:

class getXML{

function getXML($incomingMessage){

更大的问题是你没有一个带参数的构造函数

因此,请尝试将其更改为:

public function __construct($incomingMessage)
{

并为一个班级选择更好的名字。