it-swarm-eu.dev

Problema JUri :: base (), perdendo il sottodominio

C'è una possibilità che si tratti di un bug, ma sono abbastanza sicuro di dover trascurare qualcosa.

Fondamentalmente JUri::base() sta rimuovendo il percorso del sottodominio, questo è in siteground con i suoi ambienti di gestione temporanea di Joomla, quindi il dominio che dovrebbe ottenere è http://staging1.domain.com Ma invece ottiene http://domain.com.

Ho provato JUri::base() nel file modello e ha funzionato correttamente, ma nel componente personalizzato creato per il sito non funziona.

Ecco come viene utilizzato:

$tmpFileName = md5($id.$Itemid.time()).'.pdf';
file_put_contents(
  JPATH_SITE.'/tmp/'.$tmpFileName,
  file_get_contents(
    JUri::base()
    .'index.php?option=com_component&view=finish&format=pdf&tmpl=component&data='
      .$id
      .'&Itemid='
      .$Itemid
  )
);

Ciò che fa il codice sopra è aprire un file pdf generato (una vista pdf) che lo salva nella directory tmp, quindi più avanti nello script lo include come allegato (eliminandolo dopo le parole).

Se in quest'area aggiungo JUri::base() all'email (quindi posso vedere di cosa si tratta in base all'email inviata) rimuove il sottodominio, ho confermato che il reindirizzamento al controller che fa questa funzione è corretto , ma il motivo per cui l'URL risulta improprio solo in questa funzione mi sfugge (JRoute funziona bene).

Non riesco a usare JUri::base(true) in quanto è il server che tenta di ottenere il contenuto del file, quindi senza l'URL non è possibile ottenere correttamente il file. Inoltre ho controllato la variabile $live_site Nel file configuration.php e ho confermato che non è un fattore in questo.

Molto probabilmente è qualcosa di stupido che sto trascurando, molto probabilmente proprio di fronte alla mia faccia e aggiornerò la domanda con eventuali risultati man mano che procederò. Quindi c'è qualcosa che potrebbe causare questo? O qualcuno ha incontrato qualcosa di simile?

La versione è 3.3.1

AGGIORNARE:

Approfondito ed ecco le mie scoperte.

  1. Ho sbagliato a pensare che fosse JUri::base() completamente, anche se avevo visto che stava ottenendo la variabile sbagliata ora non vedo alcuna prova, sebbene il risultato sia lo stesso, sta ottenendo informazioni dal sito live e non il sito di gestione temporanea.
  2. Ho testato l'esecuzione di tutto il codice e controllo il pdf generato quando vado direttamente all'URL che genera, crea il PDF perfettamente, ma quando fatto con il file_get_contents funzione fa qualcosa di totalmente e completamente diverso (prende un pdf dall'URL sbagliato, anche se l'URL sembra essere corretto e testandolo ha funzionato).
  3. Ho notato che ho usato un htpasswd sul sito e poiché la funzione file_get_contents Va all'URL dal server stesso, deve autenticarsi, quindi non c'era modo di generare un pdf in questo ambiente di staging nel primo posto. Ciò conferma che il pdf viene generato dal sito live che non ha htpasswd.
7
Jordan Ramstad

Immagino che tu abbia il "live_site" definito nel tuo file di configurazione. Guardando il codice per Juri::base() c'è questa istruzione if:

if (trim($live_site) != '')
{
    // build base url from the live_site setting
    ...
}
else
{
    // build base url from current scheme, Host, and port
    ...
}

Quindi, se hai "live_site" impostato nella tua configurazione, sembra che il sistema possa usarlo al posto del tuo attuale url.

(Non ho mai visto questo problema personalmente, quindi potrebbe anche essere molto lontano, ma sembra promettente.)

4
David Fritsch