- Chạy PHP 5.3.8 trên Linux-get_browser() trả về FALSE
Để bắt đầu, chúng tôi đã giải quyết được vấn đề này tới điểm mà hàm trả về các giá trị mong đợi. Tuy nhiên vẫn còn rất nhiều câu hỏi chưa được trả lời tôi có, và "giải pháp" là một hack-xung quanh hơn bất cứ điều gì.
Tôi đã dành phần tốt hơn trong một ngày cho vấn đề này, vì vậy hãy chịu đựng tôi khi tôi giải thích những gì đã được thực hiện. Để bắt đầu, vấn đề là giá trị trả về của get_browser()
là FALSE
, không phải là giá trị trả về được ghi nhận. Điều này dẫn tôi giả định rằng FALSE
được trả về có nghĩa là một số loại trạng thái lỗi trong hàm.
Mã thử nghiệm, sau nhiều lần lặp lại, trở thành chỉ đơn giản var_dump(get_browser($agent, true))
. Tôi chạy các thử nghiệm với cả việc truyền chuỗi tác nhân người dùng trực tiếp, cũng như không truyền tham số, ví dụ: var_dump(get_browser())
, tất cả đều có cùng giá trị trả lại.
gì đã được thử nghiệm/kiểm tra, không có sự thay đổi trong giá trị trả về:
browscap.ini:
- Có phiên bản mới nhất, cũng đã thử nghiệm một vài phiên bản trước
Quyền:
bowscap.ini - điều khoản ban đầu là 644, nhưng tôi đã cố gắng mọi thứ từ 644-777
Thư mục chứa browscap.ini - điều khoản ban đầu là 755, đã cố gắng 777 cũng
đã xác minh rằng PHP có thể truy cập vào các tập tin và thư mục với các chức năng khác như
file()
User Agent
Cố gắng đi qua một chuỗi đại lý hướng dẫn sử dụng
Cố gắng đi qua $ _SERVER [ 'HTTP_USER_AGENT']
xác nhận chuỗi user agent của tôi với một người bạn ở một vùng đất xa xôi -
get_browser()
giá trị trở lại như mong đợi .
php.ini
Những điểm thiết lập browscap đến vị trí đúng
xác nhận một lần nữa với
echo count(file(ini_get('browscap')));
Lỗi Logs
- Checked PHP & Apache err hoặc nhật ký cho bất kỳ đề cập đến 'browscap' hoặc bất cứ điều gì thậm chí liên quan chặt chẽ - không có gì trong số bình thường.
Cấu trúc tập tin
Đây là nơi mà tôi nghi ngờ rằng lỗi đến từ đâu. browscap.ini sống ở /var/php/
, có các quyền phù hợp như đã nêu ở trên. Suy nghĩ của tôi là có lẽ PHP không thể truy cập thư mục này, hoặc một cái gì đó dọc theo những dòng đó. Tuy nhiên, thư mục này cũng là nơi các phiên được lưu trữ, do đó sẽ ít có khả năng xảy ra.
"giải pháp"
gì giải quyết vấn đề này đã được di chuyển browscap.ini vào thư mục web công cộng. Tôi tò mò là tại sao đây là trường hợp, đặc biệt là cho các giá trị trả lại không có giấy tờ. "Giải pháp" hoạt động, nhưng không phải là giải pháp mà tôi nghĩ rằng tôi sẽ tìm thấy ...
Có yêu cầu quyền đặc biệt hoặc bất kỳ điều gì tương tự không? file()
có thể truy cập vào thư mục và tập tin tốt, nhưng get_browser()
không thể (có lẽ). Tôi đã thực sự kéo tóc của tôi ra về vấn đề này và sẽ yêu một số độ phân giải!
Cảm ơn bạn đã đọc!
Bạn đang sử dụng tính năng này để làm gì? Tiêu đề tác nhân người dùng và nhận ra nó không chính xác đáng tin cậy. Bạn có lẽ sẽ có may mắn hơn kiểm tra khả năng của trình duyệt với javascript và gửi thông tin này đến máy chủ. Tuy nhiên điều này không cần thiết, vì bạn thường xử lý phương sai 100% phía máy khách. – dqhendricks
@dqhendricks Điều này là để bảo trì trên một codebase (khá lớn) hiện có. Các giá trị từ cuộc gọi này được sử dụng khắp nơi trong cả nội dung tiền xử lý và phân phát. Tôi luôn mở ra những cách làm mới/tốt hơn, nhưng có lẽ sẽ có quá nhiều việc để thay đổi toàn bộ hệ thống trong trạng thái hiện tại của nó. – orourkek
tôi hiểu. chúc may mắn sau đó. – dqhendricks