Vấn đề JUri :: base (), mất tên miền phụ


7

Có khả năng đây là một lỗi, nhưng tôi khá chắc chắn rằng tôi phải xem xét một cái gì đó.

Về cơ bản JUri::base()là loại bỏ đường dẫn tên miền phụ, đây là trong trang web với môi trường dàn dựng Joomla của nó, vì vậy tên miền mà nó sẽ nhận được http://staging1.domain.comnhưng thay vào đó nó lại có được http://domain.com.

Tôi đã thử nghiệm JUri::base()trong tệp mẫu và nó hoạt động chính xác, nhưng trong thành phần tùy chỉnh được xây dựng cho trang web thì không.

Đây là cách nó đang được sử dụng:

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

Những gì đoạn mã trên làm là mở một tệp pdf được tạo (chế độ xem pdf) lưu nó vào thư mục tmp, sau đó trong tập lệnh bao gồm nó dưới dạng tệp đính kèm (xóa nó sau khi trả lời).

Nếu trong khu vực này tôi thêm JUri::base()vào email (vì vậy tôi có thể thấy nó là gì theo email đã gửi) thì nó sẽ xóa tên miền phụ, tôi đã xác nhận rằng việc chuyển hướng đến bộ điều khiển thực hiện chức năng này là chính xác, nhưng lý do url xuất hiện không đúng trong chỉ chức năng này làm tôi khó hiểu ( JRoutehoạt động tốt).

Tôi không thể sử dụng JUri::base(true)vì đây là máy chủ đang cố lấy nội dung của tệp, vì vậy nếu không có url, nó không thể lấy tệp chính xác. Ngoài ra tôi đã kiểm tra $live_sitebiến trong tệp configure.php và xác nhận nó không phải là một yếu tố trong việc này.

Rất có thể đó là thứ gì đó ngu ngốc mà tôi đang nhìn, rất có thể ngay trước mặt tôi và tôi sẽ cập nhật câu hỏi với bất kỳ phát hiện nào khi tôi đi. Vì vậy, có bất cứ điều gì có thể gây ra điều này? Hoặc có ai gặp phải điều gì tương tự?

Phiên bản là 3.3.1

CẬP NHẬT:

Lặn sâu hơn và đây là những phát hiện của tôi.

  1. Tôi đã sai khi nghĩ rằng nó JUri::base()hoàn toàn, mặc dù tôi đã thấy rằng nó đang nhận sai biến bây giờ tôi không thấy bằng chứng nào về nó, mặc dù kết quả là như nhau, nó đang lấy thông tin từ trang web trực tiếp chứ không phải trang web dàn dựng.
  2. Tôi đã kiểm tra việc thực thi tất cả các mã và kiểm tra pdf được tạo khi tôi truy cập trực tiếp vào url mà nó tạo ra, nó tạo ra PDF hoàn hảo, nhưng khi thực hiện với file_get_contentschức năng, nó làm một cái gì đó hoàn toàn khác biệt (lấy một pdf từ sai url, mặc dù url có vẻ đúng và thử nghiệm nó đã hoạt động).
  3. Tôi nhận thấy tôi đã sử dụng một htpasswd trên trang web và vì file_get_contentschức năng đi đến url từ chính máy chủ nên nó cần xác thực, do đó, không có cách nào để tạo pdf trong môi trường dàn dựng này ở nơi đầu tiên. Điều này xác nhận rằng pdf đang được tạo từ trang web trực tiếp không có htpasswd.

Câu trả lời:


4

Tôi đoán rằng bạn có "live_site" được xác định trong tệp cấu hình của bạn. Nhìn vào mã cho Juri::base()câu lệnh if này:

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

Vì vậy, nếu bạn đã đặt "live_site" trong cấu hình của mình, có vẻ như hệ thống có thể sử dụng thay vì url hiện tại của bạn.

(Tôi chưa bao giờ thực sự nhìn thấy vấn đề này một cách cá nhân, vì vậy điều này cũng có thể được giải quyết, nhưng nó có vẻ đầy hứa hẹn.)


Vâng, tôi đã cố gắng nói trong câu hỏi của mình, tôi đã tìm kiếm điều đó, sự nhầm lẫn lớn nhất là nó ổn trong mẫu nhưng không phải trong thành phần, có thể một số plugin đang cố gắng thay đổi nó? Có vẻ như không thể nhưng lúc này não tôi đã nổ tung.
Jordan Ramstad

Chà, tôi chắc chắn đã không đọc câu hỏi đủ chặt chẽ ...
David Fritsch

Thật tốt, nó chắc chắn có thể giúp ai đó có vấn đề tương tự và đó là câu hỏi quan trọng hơn của tôi :) Xin chào Joomla!
Jordan Ramstad

Suy nghĩ khác của tôi là thử JUri::reset()đầu tiên và xem nếu nó sửa nó. Nếu có thì một cái gì đó chắc chắn đã hack cấu hình "live_site" để trở JUri::base()thành một thứ khác.
David Fritsch

Vẫn chưa bao giờ giải quyết điều này, hack nó để làm việc với htaccess mặc dù. Nhưng điều này có thể trả lời nó cho một số người. Tôi cảm thấy đó là do môi trường của tôi vì vậy đánh dấu câu trả lời này.
Jordan Ramstad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.