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.com
như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 ( JRoute
hoạ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_site
biế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.
- 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. - 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_contents
chứ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). - Tôi nhận thấy tôi đã sử dụng một htpasswd trên trang web và vì
file_get_contents
chứ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.