Back to top

Autore Topic: Usare oggetti Joomla fuori dalle cartelle predefinite  (Letto 3293 volte)

Offline CiaoCiciu

  • Nuovo arrivato
  • *
  • Post: 2
    • Mostra profilo
Allora, innanzitutto un saluto a tutti. Sono un po' fuori luogo perché sono un programmatore che non ha fatto molto nel campo web, e mi è stato dato un piccolo incarico per una modifica ad un progetto in php che usa Joomla. Chiedo perdono in anticipo se scriverò stupidaggini.

Ho bisogno di accedere al database di un sito che usa Joomla da una pagina web che deve stare necessariamente subito dopo l'indirizzo del sito web, ad esempio: www.ilmiosito.it/lamiapagina.php

Ho quindi necessità di recuperare la password, il nome del DB ecc. chiamando l'oggetto seguente:

Codice: [Seleziona]
$conf = & JFactory::getConfig()
Però non riesco ad includere la classe JFactory nella mia nuova pagina che ovviamente non si trova nella struttura di cartelle che si aspetta Joomla (infatti è alla radice del sito).
Per includere gli oggetti di cui ho bisogno provo qualcosa del genere (che tra l'altro ho trovato spulciando questo ed altri forum):
Codice: [Seleziona]
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
// senza la prossima echo ho l'errore "Oggetto non trovato!" e l'errore 404
echo 'bla bla bla';

// i percorsi alle pagine sono abbreviati usando *
if (file_exists('*defines.php'))
    require_once '*defines.php';
if (!defined('_JDEFINES')) {
    define('JPATH_BASE', dirname(__FILE__));
    require_once '*defines.php';
}

require_once '*framework.php';
-------------

RISULTATO:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\www\pagina.php:6) in C:\***\framework.php on line 28

Alla riga 28 di framework.php c'è il seguente:
Codice: [Seleziona]
header( 'Location: ../installation/index.php' );Quindi la prima domanda è cosa dovrei modificare per non includere le intestazioni di cui mi dice l'errore.
Come ho scritto nel commento, senza la echo alla riga 4 non mi visualizza proprio la pagina e mi rimanda alla pagina http://localhost/installation/index.php.

---
Infine una domanda (perdonatemi se è una castroneria), se per caso inserisco la password della base dati direttamente nel codice php invece di prenderlo da JFactory, commetto un errore grave di sicurezza oltre che di progettazione? Perché alla fine non sarà visibile dagli utenti ed allo stesso tempo non avrò bisogno di JFactory, giusto?  ???
« Ultima modifica: 02 Ago 2012, 09:57:16 da CiaoCiciu »

Offline Murphz

  • Global Moderator
  • Abituale
  • ********
  • Post: 1335
  • Sesso: Maschio
  • Trust No1
    • Mostra profilo
Re:Usare oggetti Joomla fuiri dalle cartelle predefinite
« Risposta #1 il: 01 Ago 2012, 16:34:20 »
Per rispondere alla tua prima domanda:


Codice: [Seleziona]

// Get Joomla! framework
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/..' )); /* modifica /.. in quello che ti serve */
require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );


/* variabili che ti possono servire, richiamate in maniera standard */
$mainframe =& JFactory::getApplication('site');
$user =& JFactory::getUser();
$session =& JFactory::getSession();
$db =& JFactory::getDBO();


Modificando /.. a seconda delle tue necessità, se il file è una cartella all'interno della root ti basta il /.. (che riferisce di tornare indietro di una cartella, altrimenti modificalo.


Per la seconda domanda sicuramente è un grave errore di sicurezza, se proprio non ti funziona almeno non inserirla direttamente ma prendi i dati dal file configuration.php, in questo modo non rimane traccia nel file php ma la soluzione migliore è sempre utilizzare lo standard di joomla.



Freelance Web & Graphic Design // Twitter

"...Nothing Important Happened Today..."

mau_develop

  • Visitatore
Re:Usare oggetti Joomla fuiri dalle cartelle predefinite
« Risposta #2 il: 01 Ago 2012, 19:35:36 »
fuori dal framework joomla, quindi senza sviluppare estensioni, non usi nulla di joomla

M.
@ Murphz: nn prendere le mie parole come vangelo ...ma creare una nuova istanza del framework per poi fare una query non è che abbia molto senso... anzi, diciamo che nn si fa, nn vedo ragioni...
istanziare nuovamente il framework vuol dire avere due istanze dello stesso oggetto non lo stesso oggetto, quindi può avere una praticità solo diciamo, per smanettare non per implementare qualcosa.

...ma allora per smanettare puoi benissimo creare un componente vuoto di cui usi solo l'entry point o fai la stessa cosa con un modulo (avrai o non avrai a disposizione diverse classi e quindi differenti metodi)

...o meglio ancora perchè non usare direttamente php?
« Ultima modifica: 01 Ago 2012, 20:29:57 da mau_develop »

Offline CiaoCiciu

  • Nuovo arrivato
  • *
  • Post: 2
    • Mostra profilo
Re:Usare oggetti Joomla fuori dalle cartelle predefinite
« Risposta #3 il: 02 Ago 2012, 09:59:05 »
Grazie, quindi farò come dite, non userò Joomla per quella pagina e metterò la password in un posto più sicuro.

----
P.S. ho corretto il titolo della discussione, c'era scritto "fuiri" invece di "fuori"

Offline Murphz

  • Global Moderator
  • Abituale
  • ********
  • Post: 1335
  • Sesso: Maschio
  • Trust No1
    • Mostra profilo
Re:Usare oggetti Joomla fuori dalle cartelle predefinite
« Risposta #4 il: 02 Ago 2012, 10:32:32 »
Hai ragione mau, si tratta di una nuova istanza e quindi non ha molto senso ma è un rapido aiuto se devi utilizzare il framework al di fuori di joomla. Effettivamente creare un componente è il miglior suggerimento.


Se posso chiedertelo e andare leggermente OT...a livello di sicurezza cosa comporta il fatto di istanziare un nuovo framework?
Freelance Web & Graphic Design // Twitter

"...Nothing Important Happened Today..."

mau_develop

  • Visitatore
Re:Usare oggetti Joomla fuori dalle cartelle predefinite
« Risposta #5 il: 02 Ago 2012, 12:49:34 »
in teoria non dovrebbe cambiare nulla, credo che il problema possa verificarsi se quei tre include non dovessero caricare qualche classe che estendendone una del framework contribuisca a funzionalità di sicurezza.
più che altro come dicevo prima, non è tanto un problema di sicurezza, è che usi un aereo per andare a fare la spesa...
diventerebbe un problema di sicurezza qualora questa cosa fosse persistente, ovvero invece di creare un estensione usi questo "non-sistema"...

M.
« Ultima modifica: 02 Ago 2012, 16:56:25 da mau_develop »

 



Web Design Bolzano Kreatif