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.
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.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é).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.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.)