Vấn đề với PHP 5.3 và thư mục phiên


81

Gần đây tôi đã nâng cấp lên PHP 5.3 và kể từ đó tôi nhận được thông báo lỗi (lẻ tẻ) cho biết Apache (hoặc có thể là tệp phiên làm sạch) không có quyền đối với thư mục lưu trữ phiên.
Điều này xảy ra ngẫu nhiên và không thể được tái tạo với các bước chính xác, điều này khiến tôi đoán nó là trình dọn dẹp phiên.
Bất kỳ ai có bất kỳ kinh nghiệm với các lỗi như vậy?

Thông báo lỗi (được kích hoạt trên session_start()dòng) là:

ps_files_cleanup_dir: opendir (/ var / lib / php5) không thành công: Quyền bị từ chối.

ls -ltr trên thư mục phiên cung cấp:

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

Bên trong thư mục này, tôi thấy các tệp phiên thuộc sở hữu của www-data, đó là Apache của tôi và ứng dụng hoạt động tốt. Điều này khiến tôi tự hỏi, phiên GC chạy dưới người dùng nào?


Tôi đã làm, nhưng không phải vào ngày 5.3. Hóa ra là lỗi quyền đã lọc xuống đường dẫn lưu phiên. Tôi cho rằng bạn đã kiểm tra quyền?
Jarrod Nettles vào

@Jarrod Tôi thấy www-data có thể đọc và ghi vào thư mục đó (hiện có w & r cho mọi người, người dùng, nhóm và thế giới). Tôi có nên kiểm tra thứ gì khác không?
Itay Moav -Malimovka

Tôi đoán lý do nó xảy ra không thường xuyên là lỗi xảy ra khi chạy trình thu gom rác phiên, điều mà tôi nghĩ theo mặc định có 1% cơ hội chạy mỗi lần khởi chạy phiên. Bạn đã thực hiện bất kỳ thay đổi nào đối với các phiên liên quan đến php.ini chưa? Cái gì nằm ngoài mặc định ở đây? Kiểm tra chủ sở hữu của thư mục phiên, sau đó tôi bị mất mà không thấy .ini hoặc lỗi.
Jarrod Nettles

Chủ sở hữu là root, các phiên được tạo bởi www-data, mọi người đều có quyền truy cập vào thư mục này. Tôi sẽ lần lượt xem qua cài đặt ini, tìm kiếm điều gì đáng ngờ.
Itay Moav -Malimovka

ps_files_cleanup_dir: opendir (/ var / lib / php5) không thành công: Quyền bị từ chối (
Itay Moav -Malimovka

Câu trả lời:


121

Việc sửa chữa: Trong bạn php.inithiết lập session.gc_probabilityđể0

Nguyên nhân mà tôi tin rằng tôi đã tìm thấy câu trả lời ở đây http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

Về cơ bản, bộ sưu tập rác được thiết lập để thực hiện bởi các công việc cron trên một số hệ thống (tức là Ubuntu / Debian). Một số tệp thực thi php ini như php-cli cũng cố gắng thu gom rác và điều đó dẫn đến lỗi bạn nhận được.


6
Tôi cũng đang gặp sự cố này trên Ubuntu 10.04, nhưng khi kiểm tra php.ini, tôi thấy nó session.gc_probabilityđã được đặt thành 0.
Jonathan

5
@Jonathan - Có thể bạn sẽ thấy rằng ứng dụng của bạn đang đặt giá trị sau đó.
SynackSA

3
@SynackSA Lạ lùng thay, đó là khi tôi tạo ra một tùy chỉnh, trang web cụ thể tập tin php.ini, đó là khi session.gc_probabilitykích hoạt để 1. Điều này xảy ra ngay cả khi không có các thiết lập trong file php.ini nào ! Tôi đang chạy suphp trên Ubuntu, Apache 2.2. Tôi tự hỏi nếu đó là một số loại lỗi. Dù sao, việc thêm session.gc_probability = 0vào tệp php.ini tùy chỉnh, trang web cụ thể của tôi dường như giải quyết được vấn đề.
Jonathan

2
@ Jonathan Đó là cách nó là giả sử để làm việc, như giá trị mặc định là 1
ROunofF

2
Điều này vô hiệu hóa việc thu gom rác phiên. Bạn có thể nên muốn kiểm tra xem có thực sự có cron đang dọn dẹp các phiên của bạn hay không.
hansgoed

23

Đây dường như là một lỗi điển hình trên máy chủ Ubuntu (Tôi đang sử dụng Lucid LTS). Các quyền mặc định của thư mục / var / lib / php5 có

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

vì vậy nó có thể được viết nhưng không được đọc bởi máy chủ web, tôi đoán điều đó giải thích cho các lỗi.

Vì Ubuntu có tính năng dọn rác riêng thông qua cron ( /etc/cron.d/php5), có lẽ tốt nhất là bạn nên tắt tính năng thu gom rác của php theo đề xuất ở trên của Diwant Vaidya.

session.gc_probability = 0

Thực sự có một lý do khiến thư mục phiên không thể đọc được - như Hướng dẫn sử dụng PHP nói:

Nếu bạn để bộ này thành một thư mục có thể đọc được, chẳng hạn như / tmp (mặc định), những người dùng khác trên máy chủ có thể chiếm quyền điều khiển phiên bằng cách lấy danh sách các tệp trong thư mục đó.


2

Giải pháp tôi hiện đang sử dụng (mà tôi không chắc là giải pháp chính xác) là cấp quyền sở hữu thư mục phiên cho người dùng Apache (www-data trong trường hợp của tôi).


2
Như Marie đã đề cập ở trên, điều đó có thể tạo ra vấn đề bảo mật cho bất kỳ máy chủ sản xuất nào.
Kzqai

2
Tôi đã từ lâu thực hiện các giải pháp phù hợp :-) Nhưng, vấn đề an ninh là chủ yếu trong các máy chủ chia sẻ
Itay Moav -Malimovka

1
@pike phiên làm sạch được xử lý bởi php cli qua CRON
Itay Moav -Malimovka

1

Vấn đề này đã làm phiền tôi trong một thời gian. Tôi đã thay đổi giá trị như được đề xuất trong php.ini và sự cố vẫn tiếp tục xảy ra. Tôi tìm thấy cùng một giá trị cấu hình trong index.php và private / Zend / session.php. Vì vậy, nên xem xét sâu hơn một chút nếu sự cố vẫn tiếp tục xảy ra. Tôi hy vọng điều này hữu ích cho ai đó.

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.