web-dev-qa-db-fra.com

JUri :: base (), perdant un sous-domaine

Il y a une chance que ce soit un bug, mais je suis à peu près sûr que je dois négliger quelque chose.

Fondamentalement, JUri::base() supprime le chemin du sous-domaine, il est dans siteground avec ses environnements de transfert Joomla. Le domaine à obtenir est donc http://staging1.domain.com, Mais il reçoit http://domain.com.

J'ai testé JUri::base() dans le fichier de modèle et cela a fonctionné correctement, mais pas dans le composant personnalisé créé pour le site.

Voici comment il est utilisé:

$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
  )
);

Le code ci-dessus ouvre un fichier pdf généré (une vue pdf), il l'enregistre dans le répertoire tmp, puis l'inclut plus tard dans le script en tant que pièce jointe (en le supprimant après).

Si dans cette zone j'ajoute JUri::base() à l'e-mail (pour que je puisse voir ce que c'est en fonction de l'e-mail envoyé), cela dépouille le sous-domaine, j'ai confirmé que la redirection vers le contrôleur effectuant cette fonction est correcte , mais la raison pour laquelle l’URL est incorrecte dans cette fonction ne m’échappe pas (JRoute fonctionne très bien).

Je ne peux pas utiliser JUri::base(true), car le serveur tente d'obtenir le contenu du fichier. Par conséquent, sans l'URL, il ne peut pas obtenir le fichier correctement. De plus, j'ai vérifié la variable $live_site Dans le fichier configuration.php et confirmé que ce n'était pas un facteur.

C'est probablement quelque chose de stupide que je passe sous silence, probablement juste devant mon visage et je mettrai à jour la question avec les conclusions à mesure que je pars. Alors, y a-t-il quelque chose qui pourrait causer cela? Ou quelqu'un a-t-il rencontré quelque chose de similaire?

La version est 3.3.1

MISE À JOUR:

Plongé plus profondément et voici mes conclusions.

  1. Je me suis trompé en pensant que c’était complètement JUri::base(), bien que j’ai vu qu’elle obtenait la mauvaise variable, je ne vois aucune preuve de cela, bien que le résultat soit identique, il reçoit des informations du site actif. et non le site de mise en scène.
  2. J'ai testé l'exécution de tout le code et vérifié le pdf généré quand je vais directement à l'URL qu'il génère, il crée le PDF parfaitement, mais quand c'est fait avec le file_get_contents function fait quelque chose de totalement et complètement différent (récupère un pdf depuis une mauvaise URL, même si l’url semble être correcte et que cela a fonctionné).
  3. J'ai remarqué que j'utilisais un mot de passe htpasswd sur le site, et puisque la fonction file_get_contents Accédait à l'URL du serveur lui-même, elle devait s'authentifier. Il était donc impossible qu'un PDF soit généré dans cet environnement de première place. Cela confirme que le pdf est généré à partir du site actif qui n'a pas htpasswd.
7
Jordan Ramstad

Je suppose que vous avez le "live_site" défini dans votre fichier de configuration. En regardant le code pour Juri::base(), il y a cette instruction if:

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

Donc, si "live_site" est défini dans votre configuration, il semble que le système puisse l'utiliser à la place de votre URL actuelle.

(Je n'ai jamais vraiment vu ce problème personnellement, alors cela pourrait aussi être très différent, mais cela semble prometteur.)

4
David Fritsch