我们公司的一个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网站上失败?
答案 0 :(得分:0)
我不确定您是否可以使用相同的类名和函数名称:
class getXML{
function getXML($incomingMessage){
更大的问题是你没有一个带参数的构造函数
因此,请尝试将其更改为:
public function __construct($incomingMessage)
{
并为一个班级选择更好的名字。