it-swarm.com.de

JUri :: base () Problem, Subdomain zu verlieren

Es besteht die Möglichkeit, dass dies ein Fehler ist, aber ich bin mir ziemlich sicher, dass ich etwas übersehen muss.

Grundsätzlich entfernt JUri::base() den Subdomain-Pfad, dies befindet sich im Hintergrund mit seinen Joomla-Staging-Umgebungen, sodass die Domain, die es erhalten sollte, http://staging1.domain.com Ist, aber stattdessen http://domain.com.

Ich habe JUri::base() in der Vorlagendatei getestet und es hat ordnungsgemäß funktioniert, aber in der benutzerdefinierten Komponente, die für die Site erstellt wurde, funktioniert es nicht.

So wird es verwendet:

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

Der obige Code öffnet eine generierte PDF-Datei (eine PDF-Ansicht), speichert sie im tmp-Verzeichnis und fügt sie später im Skript als Anhang ein (Löschen der Nachwörter).

Wenn ich in diesem Bereich der E-Mail JUri::base() hinzufüge (damit ich sehen kann, was der gesendeten E-Mail entspricht), wird die Unterdomäne entfernt, und ich habe bestätigt, dass die Weiterleitung an den Controller, der diese Funktion ausführt, korrekt ist , aber der Grund, warum die URL nur in dieser Funktion nicht korrekt angezeigt wird, entgeht mir (JRoute funktioniert einwandfrei).

Ich kann JUri::base(true) nicht verwenden, da der Server versucht, den Inhalt der Datei abzurufen. Ohne die URL kann die Datei nicht korrekt abgerufen werden. Außerdem habe ich in der Datei configuration.php nach der Variablen $live_site Gesucht und bestätigt, dass dies kein Faktor ist.

Höchstwahrscheinlich ist es etwas Dummes, das ich übersehen habe, höchstwahrscheinlich direkt vor meinem Gesicht, und ich werde die Frage mit allen Ergebnissen aktualisieren, wenn ich gehe. Gibt es also irgendetwas, das dies verursachen könnte? Oder ist jemand auf etwas Ähnliches gestoßen?

Version ist 3.3.1

AKTUALISIEREN:

Tauchte tiefer und hier sind meine Erkenntnisse.

  1. Ich habe mich geirrt, als ich dachte, es sei JUri::base() vollständig, obwohl ich gesehen hatte, dass es die falsche Variable bekommen hat, sehe ich keine Beweise dafür, obwohl das Ergebnis das gleiche ist, werden Informationen von der Live-Site erhalten und nicht die Staging-Site.
  2. Ich habe die Ausführung des gesamten Codes getestet und das generierte PDF überprüft, wenn ich direkt zu der URL gehe, die es generiert. Es erstellt das PDF perfekt, aber wenn es mit dem file_get_contents Fertig ist. Funktion es macht etwas ganz und gar anderes (schnappt sich ein pdf von der falschen url, obwohl die url korrekt zu sein scheint und testet es hat funktioniert).
  3. Ich habe festgestellt, dass ich auf der Site ein htpasswd verwendet habe, und da die Funktion file_get_contents Vom Server selbst zur URL wechselt, muss sie sich authentifizieren, sodass in dieser Staging-Umgebung in der URL kein PDF generiert werden sollte erster Platz. Dies bestätigt, dass das PDF von der Live-Site generiert wird, die kein htpasswd hat.
7
Jordan Ramstad

Ich vermute, dass Sie die "live_site" in Ihrer Konfigurationsdatei definiert haben. Im Code für Juri::base() gibt es diese if-Anweisung:

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

Wenn Sie also "live_site" in Ihrer Konfiguration festgelegt haben, scheint das System dies anstelle Ihrer aktuellen URL zu verwenden.

(Ich habe dieses Problem noch nie persönlich gesehen, daher könnte es auch weit davon entfernt sein, aber es sieht vielversprechend aus.)

4
David Fritsch