it-swarm-es.tech

Problema JUri :: base (), perdiendo subdominio

Existe la posibilidad de que esto sea un error, pero estoy bastante seguro de que debo pasar por alto algo.

Básicamente, JUri::base() está eliminando la ruta del subdominio, esto está en el sitio con sus entornos de preparación de Joomla, por lo que el dominio que debería obtener es http://staging1.domain.com Pero en su lugar obtiene http://domain.com.

Probé JUri::base() en el archivo de plantilla, y funcionó correctamente, pero no funciona en el componente personalizado creado para el sitio.

Así es como se está utilizando:

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

Lo que hace el código anterior es abrir un archivo pdf generado (una vista de pdf), guardarlo en el directorio tmp, luego, más adelante en el script, lo incluye como un archivo adjunto (eliminándolo después).

Si en esta área agrego JUri::base() al correo electrónico (para que pueda ver qué es de acuerdo con el correo electrónico enviado) elimina el subdominio, he confirmado que la redirección al controlador que realiza esta función es correcta , pero la razón por la que la url se muestra incorrecta solo en esta función se me escapa (JRoute funciona bien).

No puedo usar JUri::base(true) ya que es el servidor que intenta obtener el contenido del archivo, por lo que sin la URL no puede obtener el archivo correctamente. También he verificado la variable $live_site En el archivo configuration.php y he confirmado que no es un factor en esto.

Lo más probable es que sea algo estúpido lo que estoy pasando por alto, muy probablemente justo en frente de mi cara y actualizaré la pregunta con cualquier hallazgo a medida que avance. Entonces, ¿hay algo que pueda causar esto? ¿O alguien se ha encontrado con algo similar?

La versión es 3.3.1

ACTUALIZAR:

Buceé más profundo y aquí están mis hallazgos.

  1. Me equivoqué al pensar que era JUri::base() completamente, aunque había visto que estaba obteniendo la variable incorrecta ahora no veo evidencia de ello, aunque el resultado es el mismo, está obteniendo información del sitio en vivo y no el sitio de preparación.
  2. Probé la ejecución de todo el código y verifiqué el pdf generado cuando voy directamente a la url que genera, crea el PDF perfectamente, ¡pero cuando lo hago con el file_get_contents funciona, hace algo totalmente y completamente diferente (toma un pdf de la url incorrecta, aunque la url parece ser correcta y la prueba funcionó).
  3. Noté que utilicé un htpasswd en el sitio, y dado que la función file_get_contents Va a la url del servidor mismo, necesita autenticarse, por lo que no había forma de generar un pdf en este entorno de preparación en el primer lugar. Esto confirma que el pdf se está generando desde el sitio en vivo que no tiene htpasswd.
7
Jordan Ramstad

Supongo que tienes el "live_site" definido en tu archivo de configuración. Al mirar el código para Juri::base() existe esta declaración if:

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

Entonces, si tiene "live_site" establecido en su configuración, parece que el sistema puede usarlo en lugar de su url actual.

(Nunca he visto este problema personalmente, por lo que también podría estar muy lejos, pero parece prometedor).

4
David Fritsch