Joomla 通过 php 脚本应用程序实例化错误添加文章

Joomla add article via php script Application Instantiation Error

我创建了一个脚本,以便通过 php 脚本插入一些文章。该脚本在我的本地计算机上运行 (xampp),但是当我将整个 joomla 项目部署到我的 Web 服务器时,我收到以下错误消息:

Error displaying the error page: Application Instantiation Error: Application Instantiation Error

通过添加一些回声调用,我能够找到导致错误的行:

$app = JFactory::getApplication('site');

现在我想知道如何解决此问题并使我的功能在 Web 服务器上也 运行。

下面我将提供我的系统信息和我的 php 函数的开头,直到导致错误消息的行:


系统信息


PHP 片段

<?php

echo "STARTING;   ";

// get db connection
include('../includes/mysql.inc.php');

// get all sql querys
include('./autoNewsQuerys.inc.php');

/**
 * Prepare joomla framework to insert article correctly
 */
if (!defined('_JEXEC')) {
    define('_JEXEC', 1);
    define('JPATH_BASE','/is/htdocs/wp1088688_4E1H7PYJFK/www');
    require_once(JPATH_BASE . '/includes/defines.php');
    require_once(JPATH_BASE . '/includes/framework.php');
    defined('DS') or define('DS', DIRECTORY_SEPARATOR);
}

echo "searching app;";
$app = JFactory::getApplication('site');
echo "Found app;";

 

完整的浏览器输出

STARTING; searching app;Error displaying the error page: Application Instantiation Error: Failed to start the session because headers have already been sent by "/is/htdocs/wp1088688_4E1H7PYJFK/www/1500AutoNews/autoNews.php" at line 3.

如您所见,错误是由 JFactory 调用引起的。 'Found app' 永远不会打印出来。

只需将 Joomla index.php 文件复制到另一个文件,然后用您的代码替换 $app->execute 代码。

注意:您不需要包含任何 MySQL 库 - 因为您正在加载 Joomla 环境,所以您可以访问 JDatabase class,它是一个数据库抽象层。

另一个注意事项:此文件 autoNewsQuerys.inc.php 可能包含一些问题(也许您正在尝试在那里实例化应用程序,但尚未加载 Joomla 环境)。你应该把它移到最后。

如果它在本地主机上工作但在 Web 服务器上不工作,那么最大的问题是定义基本路径。提供 joomla 安装的硬编码基本路径。我建议您使用 php 脚本检查您的基本路径。创建一个 php 文件并将其命名为 path.php。将它放在 Joomla 主文件夹中。文件内容

<?php
echo "The Base path is ".getcwd();
?>

获得路径后,只需更改 Base_Path。例如:

define('JPATH_BASE', '\var\www\joomla');