Database benaderen met JApplicationCli

  • Frits Jongbloets
  • Onderwerp Auteur
  • Gebruiker
  • Gebruiker
Meer
11 jan 2017 19:35 #11300 door Frits Jongbloets
Database benaderen met JApplicationCli werd gestart door Frits Jongbloets
Wil een kleine utility maken die elke nacht opgestart wordt via cron en dan bepaalde gegevens uit de database ophaalt, in een xml file zet en verstuurt. Heb de JApplicationCli class ontdekt en een aantal voorbeelden gevonden waarmee ik al een eindje op weg ben. Maar: ik krijg geen contact met de database via JFactory::getDbo()

Heb zowel op lokale server (MAMP) als op een develop lokatie op live server geprobeerd. Als ik het $db object uitlees dan ziet het er in mijn ogen normaal uit, correcte namen van database, user etc.

Ik hoop dat ik iets heel voor de hand liggends over het hoofd zie?
Discussie gesloten.
  • Sander Potjer
  • Gebruiker
  • Gebruiker
  • Sander is voorzitter van Stichting Joomla Nederland, de stichting voor de promotie en ondersteuning
Meer
11 jan 2017 22:45 #11305 door Sander Potjer
Beantwoord door Sander Potjer in topic Database benaderen met JApplicationCli
Dit is een voorbeeldje van wat bij ons werkt en we verbinding krijgen met de database, wellicht helpt het je verder:
Code:
public function execute() { // Run as administrator application JFactory::getApplication('administrator'); // Connect with DB $db = JFactory::getDbo(); }

Joomla! ontwikkelaar @ Perfect Web Team - perfectwebteam.nl
PWT ACL voor Joomla maakt ACL in Joomla begrijpelijk! - [url=https://extensions.perfectwebteam.com/pwt
Discussie gesloten.
  • Frits Jongbloets
  • Onderwerp Auteur
  • Gebruiker
  • Gebruiker
Meer
13 jan 2017 12:32 #11324 door Frits Jongbloets
Beantwoord door Frits Jongbloets in topic Database benaderen met JApplicationCli
Dag Sander, bedankt voor je reactie.

Jouw script vertoont veel overeenkomsten met wat ik al had gemaakt, het belangrijkste verschil is deze regel, die had ik niet:
Code:
JFactory::getApplication('administrator');

Echter ook met jouw script krijg ik geen contact met de database, noch lokaal, noch op de live server. Met wat uitcommenten kwam ik erachter dat deze error bij jouw script zelfs al eerder optreedt, namelijk bij bovengenoemde aanroep van de methode getApplication(). Blijbaar heeft die ook de database nodig.

Zonder bovengenoemde regel loopt het mis bij:
Code:
$results = $db->loadObjectList();

Voor de zekerheid geef ik de volledige error message die mijn lokale command line geeft (via Terminal op de Mac):
Code:
Error displaying the error page: Application Instantiation Error: Could not connect to MySQL.

De vorige keer had ik al wat gegoogled op dit type fouten maar vond vooral opmerkingen over het controleren van de configuration.php instellingen. Nu draait de site op beide servers normaal dus je zou zeggen dat dat niet het probleem is. Het desondanks wat geprobeerd met poortnummer op de lokale server, echter zonder resultaat (de site zelf trok zich daar overigens niets van aan).

Ben benieuwd of er nog iemand een suggestie heeft...
Discussie gesloten.
  • J Sanders
  • Gebruiker
  • Gebruiker
  • Ontwikkelaar van [url=www.mijnrekensite.nl]MijnRekensite.nl[/url].
Meer
13 jan 2017 15:07 #11327 door J Sanders
Beantwoord door J Sanders in topic Database benaderen met JApplicationCli
Je kunt de database ook benaderen via JDatabase.
Info: Selecting data using JDatabase
Of deze opgestart / rechtstreeks benaderd kan worden via een cronjob is mij onbekend.

Ontwikkelaar van MijnRekensite.nl , een online oefenmethode voor rekenen.
Discussie gesloten.
  • Sander Potjer
  • Gebruiker
  • Gebruiker
  • Sander is voorzitter van Stichting Joomla Nederland, de stichting voor de promotie en ondersteuning
Meer
13 jan 2017 15:12 #11328 door Sander Potjer
Beantwoord door Sander Potjer in topic Database benaderen met JApplicationCli
@jedu#, dat is inderdaad wat @oorzaak# probeert te doen, maar dan vanuit een CLI script.

@oorzaak# kan je wellicht even je hele CLI script posten, wellicht dat we dan de fout kunnen ontdekken.

Joomla! ontwikkelaar @ Perfect Web Team - perfectwebteam.nl
PWT ACL voor Joomla maakt ACL in Joomla begrijpelijk! - [url=https://extensions.perfectwebteam.com/pwt
Discussie gesloten.
  • J Sanders
  • Gebruiker
  • Gebruiker
  • Ontwikkelaar van [url=www.mijnrekensite.nl]MijnRekensite.nl[/url].
Meer
13 jan 2017 16:54 #11330 door J Sanders
Beantwoord door J Sanders in topic Database benaderen met JApplicationCli
Na wat speurwerk op internet en een eigen interpretatie, zou je het volgende kunnen proberen:
Code:
$app = JFactory::getApplication('administrator'); $app->initialise(); $db = JFactory::getDbo();
of 1e regel vervangen door:
Code:
$app = JFactory::getApplication('administrator', array('session' => false));
of 'administrator' eventueel vervangen door 'site'.

Gr.

Ontwikkelaar van MijnRekensite.nl , een online oefenmethode voor rekenen.
Discussie gesloten.
  • Frits Jongbloets
  • Onderwerp Auteur
  • Gebruiker
  • Gebruiker
Meer
13 jan 2017 17:35 #11331 door Frits Jongbloets
Beantwoord door Frits Jongbloets in topic Database benaderen met JApplicationCli
Fijn dat er zo wordt meegedacht.

Ik geef hieronder de laatste stand van zaken van mijn code. Ik heb daarin twee regels uitgecomment. Met deze regels uitgecomment, werkt het script netjes, zowel lokaal (via command line) als online via cron. Het resultaat is een mailtje met de inhoud 'No database found'. Logisch want datgene wat ik uitgecomment heb betreft het contact met de database. Dat wilde ik even uitsluiten en dan loopt de basis van het script goed.

De uitgecommente regels nog even afzonderlijk:
Code:
$app = JFactory::getApplication('site', array('session' => false));
en
Code:
$results = $db->loadObjectList();

Zodra ik één van deze twee regels 'ontcomment' dan krijg ik lokaal op de command line de melding Could not connect to MySQL. Op de live server krijg ik dat natuurlijk niet te zien, wel krijg ik een mailtje met opnieuw de tekst 'No database found'. Maar nu om een andere reden: er is wel geprobeerd contact te leggen met de db maar dat is niet gelukt.

De totale code:
Code:
// Make sure we're being called from the command line, not a web interface if (PHP_SAPI !== 'cli') { die('This is a command line only application.'); } // We are a valid entry point. const _JEXEC = 1; // already defined by custom security check // Load system defines if (file_exists(dirname(__DIR__) . '/defines.php')) { require_once dirname(__DIR__) . '/defines.php'; } if (!defined('_JDEFINES')) { define('JPATH_BASE', dirname(__DIR__)); require_once JPATH_BASE . '/includes/defines.php'; require_once JPATH_BASE . '/includes/framework.php'; } // Get the framework. require_once JPATH_LIBRARIES . '/import.legacy.php'; // Bootstrap the CMS libraries. require_once JPATH_LIBRARIES . '/cms.php'; // Import the configuration. require_once JPATH_CONFIGURATION . '/configuration.php'; class JoomlaCommunityCLI extends JApplicationCli { public function execute() { // $app = JFactory::getApplication('site', array('session' => false)); $db = JFactory::getDbo(); $query = "select * from #__content"; $db->setQuery($query); // $results = $db->loadObjectList(); if($results) { // to do: create real output below $content = '<xml>'; foreach ($results as $result) { $content.= $result['title']; } $content = '</xml>'; } else $content = 'No database found'; return $content; } } $content = JApplicationCli::getInstance('JoomlaCommunityCLI')->execute(); mail( [settings voor de mail hier; ik zie dat het forum dit probeert te cloaken dus ik heb dit maar even geëdit] );

Discussie gesloten.
  • J Sanders
  • Gebruiker
  • Gebruiker
  • Ontwikkelaar van [url=www.mijnrekensite.nl]MijnRekensite.nl[/url].
Meer
13 jan 2017 18:33 #11332 door J Sanders
Beantwoord door J Sanders in topic Database benaderen met JApplicationCli
Enkele opmerkingen:
Code:
$db->setQuery($query); $db->execute(); // toevoegen // $results = $db->loadObjectList();
en
Code:
$content .= '</xml>'; // punt toevoegen
Gr.

Ontwikkelaar van MijnRekensite.nl , een online oefenmethode voor rekenen.
Discussie gesloten.
  • Frits Jongbloets
  • Onderwerp Auteur
  • Gebruiker
  • Gebruiker
Meer
13 jan 2017 19:58 #11333 door Frits Jongbloets
Beantwoord door Frits Jongbloets in topic Database benaderen met JApplicationCli
Thx, maar ook $db->execute() leidt onmiddellijk tot een foutmelding.

We moeten het echt heel ergens anders zoeken, vermoed ik. Heb ook al geprobeerd om mysql in plaats van mysqli in te stellen als db type, las ergens een suggestie in die richting. Haalde helaas ook niks uit. Maar dit om even aan te geven hoe ik intussen aan het kijken ben naar heel andere dingen dan deze code.

-- Edit: in bedoel db-type instelling in configuration.php --
Discussie gesloten.
  • J Sanders
  • Gebruiker
  • Gebruiker
  • Ontwikkelaar van [url=www.mijnrekensite.nl]MijnRekensite.nl[/url].
Meer
13 jan 2017 20:45 #11335 door J Sanders
Beantwoord door J Sanders in topic Database benaderen met JApplicationCli
Probeer deze code eens:
Code:
$db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('*') ->from($db->qn('#__content')); $db->setQuery($query); //$db->execute(); //echo $db->getQuery(); // testen $results = $db->loadObjectList();
Met de volgende code haal je gegevens voor de databaseverbinding uit configuration.php:
Code:
$config = JFactory::getConfig(); $config->get('host'); // Hostname // enzovoort
Dit is nuttig in geval je generieke (= niet Joomla! georiënteerde) php code wilt gebruiken om een databaseverbinding te maken.
Lijk me hier (nog niet) aan de orde.

Gr

Ontwikkelaar van MijnRekensite.nl , een online oefenmethode voor rekenen.
Discussie gesloten.
Gemaakt door Kunena