Ошибка JUri :: base (), потеря субдомена

Есть вероятность, что это ошибка, но я уверен, что я должен что-то игнорировать.

В основном JUri::base() удаляет путь к субдоменам, это находится на площадке с его средой разработки Joomla, поэтому домен, который он должен получать, это http://staging1.domain.com, но вместо этого он получает http://domain.com.

Я тестировал JUri::base() в файле шаблона, и он работал правильно, но в пользовательском компоненте, созданном для сайта, это не так.

Вот как он используется:

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

Что делает вышеприведенный код, открывает сгенерированный файл PDF (вид в формате pdf), который сохраняет его в каталоге tmp, а затем в скрипте включает его как вложение (удаление его послесловия).

Если в этой области я добавлю JUri::base() в электронную почту (чтобы я мог видеть, что это такое в соответствии с отправленным вами электронным письмом), он разделяет субдомен, я подтвердил, что перенаправление к контроллеру, который выполняет эту функцию, но причина, по которой URL-адрес выходит неправильно, только эта функция ускользает от меня (JRoute работает отлично).

Я не могу использовать JUri::base(true), так как сервер пытается получить содержимое файла, поэтому без URL-адреса он не сможет правильно загрузить файл. Также я проверил для переменной $live_site в файле configuration.php и подтвердил, что это не является фактором.

Скорее всего, это что-то глупое, я не замечаю, скорее всего, прямо перед моим лицом, и я обновлю вопрос с любыми выводами, когда я пойду. Так есть ли что-нибудь, что могло бы вызвать это? Или кто-нибудь сталкивался с чем-то подобным?

Версия - 3.3.1

UPDATE:

Окунитесь глубже, и вот мои выводы.

  1. Я ошибался, думая, что это был JUri::base() полностью, хотя я видел, что он получил неправильную переменную, теперь я не вижу никаких доказательств этого, хотя результат тот же , он получает информацию с живого сайта, а не на промежуточном сайте.
  2. Я протестировал выполнение всего кода и проверил созданный pdf-файл, когда я перехожу непосредственно к URL-адресу, который он создает, он отлично создает PDF-файл, но когда он выполняется с помощью функции file_get_contents, он делает что-то полностью и совершенно другой (захватывает pdf-файл с неправильного URL-адреса, хотя URL-адрес кажется правильным и проверяет его работу).
  3. Я заметил, что я использовал htpasswd на сайте, и поскольку функция file_get_contents отправляется на url с самого сервера, она должна пройти аутентификацию, поэтому не было никакого способа создать PDF-файл в это промежуточная среда в первую очередь. Это подтверждает, что PDF-файл создается с сайта, на котором нет htpasswd.
7 голосов | спросил Jordan Ramstad 7 AM00000020000001531 2014, 02:52:15

1 ответ


4

Я предполагаю, что у вас есть «live_site», определенный в вашем файле конфигурации. При просмотре кода для Juri::base() есть этот оператор if:

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

Итак, если у вас есть «live_site», установленный в вашей конфигурации, кажется, что система может использовать это вместо вашего текущего url.

(Я никогда не видел эту проблему лично, так что это тоже может быть удачным, но выглядит многообещающим.)

ответил David Fritsch 7 AM000000110000005731 2014, 11:27:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132