J'écris un cronjob (cron.php) qui devra être exécuté dans le dossier racine de Joomla qui appelle les fonctions Joomla comme JFactory::getDbo()
.
J'ai le code suivant dans cron.php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
require( JPATH_BASE.'/libraries/import.php');
$db = JFactory::getDbo();
J'ai eu l'erreur
atal error: Class 'Joomla\Registry\Registry' not found in D:\x\htdocs\xxx\libraries\joomla\factory.php on line 558
Tout d’abord, vous importez les mauvais fichiers nécessaires à l’utilisation de l’API Joomla.
Vous devez ensuite également initialiser l'application.
essayez ce qui suit:
define('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__));
require_once JPATH_BASE '/includes/defines.php';
require_once JPATH_BASE '/includes/framework.php';
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
En ce qui concerne le travail cron actuel, je suggère de placer le fichier PHP dans le répertoire CLI plutôt que le répertoire racine, comme c'est là qu'ils sont censés aller.
Jetez un coup d'œil à certains des fichiers déjà présents dans ce répertoire pour voir comment ils sont configurés.
Quelque chose que j'ai oublié de signaler, si vous souhaitez vous assurer que votre tâche cron est uniquement exécutable via une ligne de commande, vous devez ajouter les éléments suivants en haut du fichier PHP:
if (PHP_SAPI !== 'cli')
{
die('This is a command line only application.');
}
<?php
define('_JEXEC', 1);
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
if (file_exists(__DIR__ . '/defines.php'))
{
include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
$app = JFactory::getApplication('site');
$admin = '';
if(!$app->isSite()){
$admin = DS.'administrator';//echo('in administrator');
}
$db = JFactory::getDbo();