Vị trí mặc định của tệp phiên trên bản cài đặt Apache / PHP trên Ubuntu 10.10 là gì?
Vị trí mặc định của tệp phiên trên bản cài đặt Apache / PHP trên Ubuntu 10.10 là gì?
Câu trả lời:
Giá trị mặc định session.save_path
được đặt thành ""
sẽ đánh giá thư mục tạm thời của hệ thống của bạn. Xem nhận xét này tại https://bugs.php.net/bug.php?id=26757 nêu rõ:
Giá trị mặc định mới cho save_path trong phần tiếp theo (sic) sắp tới sẽ là chuỗi trống, khiến thư mục tạm thời được kiểm tra.
Bạn có thể sử dụng sys_get_temp_dir
để trả về đường dẫn thư mục được sử dụng cho các tệp tạm thời
Để tìm đường dẫn lưu phiên hiện tại , bạn có thể sử dụng
Tham khảo câu trả lời này để tìm hiểu đường dẫn tạm thời là gì khi hàm này trả về một chuỗi trống.
php.ini
tác phẩm, php_info()
sẽ cho bạn biết cái nào là được sử dụng trong eval hiện tại, và locate php.ini
sẽ giúp bạn tìm thấy chúng
Đầu tiên hãy kiểm tra giá trị của session.save_path
việc sử dụng ini_get('session.save_path')
hoặc phpinfo()
. Nếu không trống, thì nó sẽ hiển thị nơi các tệp phiên được lưu. Trong nhiều trường hợp, nó trống theo mặc định, trong trường hợp đó, hãy đọc tiếp:
Trên máy Ubuntu hoặc Debian, nếu session.save_path
chưa được đặt, thì tệp phiên sẽ được lưu vào /var/lib/php5
.
Trên hệ thống RHEL và CentOS, nếu session.save_path
không được đặt, các tệp phiên sẽ được lưu trong/var/lib/php/session
Tôi nghĩ rằng nếu bạn biên dịch PHP từ nguồn, thì khi session.save_path
không được đặt, các tệp phiên sẽ được lưu vào /tmp
(mặc dù tôi chưa thử nghiệm điều này).
php.ini
) phiên của tôi là dưới/var/lib/php5/sessions
php -i | grep session.save_path
cho đường dẫn lưu phiên CLI (và có thể là Apache). Ngoài ra, một đường dẫn đã cho php.ini
thường sẽ hiển thị đường dẫn 'mặc định' - nó chỉ được nhận xét.
/tmp
) làm giá trị dự phòng / mặc định của nó. Vui lòng tham khảo php.net/manual/en/...
/etc/php/7.0/*/php.ini
-> ;session.save_path = "/var/lib/php/sessions"
- Nhận xét không có nghĩa là 'chưa đặt' là tất cả những gì tôi muốn nói. Nó được đặt rõ ràng thành một cái gì đó khác ngoài 'blank' (/ tmp) .. và KHÔNG phải là một chuỗi rỗng / null
Nếu không chắc chắn về mặc định đã biên dịch cho session.save_path
, hãy xem phần thích hợp php.ini
.
Thông thường, nó sẽ hiển thị giá trị mặc định đã nhận xét.
php.ini
Vị trí cũ / mới của Ubuntu / Debian
: /etc/php5/apache2/php.ini
Php5 cũ hơn với Apache: Php5 cũ hơn với NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ với Apache: /etc/php/*/apache2/php.ini
*
Ubuntu 16+ với NGINX + FPM - /etc/php/*/fpm/php.ini
*
* /*/
= (các) phiên bản PHP hiện tại được cài đặt trên hệ thống.
Để hiển thị phiên bản PHP được sử dụng trong Apache:
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
Vì PHP 7.3 là phiên bản chạy cho ví dụ này, bạn sẽ sử dụng phiên bản đó cho php.ini
:
$ grep "session.save_path" /etc/php/7.3/apache2/php.ini
;session.save_path = "/var/lib/php/sessions"
Hoặc, kết hợp một lớp lót:
$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
Kết quả:
;session.save_path = "/var/lib/php/sessions"
Hoặc, sử dụng chính PHP để lấy giá trị bằng môi trường "cli" (xem LƯU Ý bên dưới):
$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$
Những điều này cũng sẽ hoạt động:
php -i | grep session.save_path
php -r 'echo phpinfo();' | grep session.save_path
GHI CHÚ:
Phiên bản 'cli' (dòng lệnh) php.ini
thường có cùng giá trị mặc định như phiên bản Apache2 / FPM (ít nhất là xa session.save_path
). Bạn cũng có thể sử dụng một lệnh tương tự để lặp lại cài đặt mô-đun PHP hiện tại của máy chủ web tới một trang web và sử dụng wget / curl để lấy thông tin. Có rất nhiều bài viết về việc phpinfo()
sử dụng trong vấn đề này. Tuy nhiên, sẽ nhanh hơn nếu chỉ sử dụng giao diện PHP hoặc grep
cho nó một cách chính xác php.ini
để hiển thị giá trị mặc định của nó.
CHỈNH SỬA: Theo bình luận @aesede -> Đã thêm php -i
. Cảm ơn
php -i
trong CLI để có được phpinfo () tương đương.
Một vị trí mặc định phổ biến khác bên cạnh đó /tmp/
là/var/lib/php5/
Tôi đã gặp khó khăn tương tự khi tìm ra đường dẫn chính xác cho các phiên trên máy Mac. Nói chung, tôi phát hiện ra rằng CLI PHP có một thư mục tạm thời khác với mô-đun Apache: Apache được sử dụng /var/tmp
, trong khi CLI sử dụng một cái gì đó như thế nào /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
. Nhưng cả hai cách, sys_get_temp_dir()
đã cho tôi con đường đúng khi session.save_path
trống rỗng. Sử dụng PHP 5.5.4.
Những điều trên không phù hợp với tôi bằng cách sử dụng IUS repo cho CentOS 7 với PHP 7.2:
php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )
php -r 'echo session_save_path(), "\n";
>
php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp
Tuy nhiên, các phiên không được lưu trong /tmp
thư mục mà trong /var/lib/php/mod_php/session/
thư mục:
ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
Tôi tin rằng nó trong / tmp /. Tuy nhiên, hãy kiểm tra hàm phpinfo của bạn, nó sẽ nói session.save_path ở đâu đó.
/tmp
- bạn có biết cái nào làm được không? Đó là trường hợp nếu bạn xây dựng PHP từ nguồn? Khi "session.save_path" là sản phẩm nào đó có thể được khôn lanh để tìm ra nơi các tập tin đi (vì câu hỏi này, tôi nghi ngờ)
Tùy chọn chắc chắn duy nhất để tìm session.save_path
giá trị hiện tại là luôn kiểm tra phpinfo()
chính xác môi trường mà bạn muốn tìm ra thư mục lưu trữ phiên.
Lý do: có thể có tất cả các loại thay đổi session.save_path
, bằng cách ghi đè php.ini
giá trị hoặc bằng cách đặt nó trong thời gian chạy với ini_set('session.save_path','/path/to/folder');
. Ví dụ, các bảng quản lý máy chủ web như ISPConfig, Plesk, v.v. thường điều chỉnh điều này để cung cấp cho mỗi trang web thư mục riêng với các tệp phiên.
Tùy thuộc vào loại máy chủ bạn đang chạy, nó có thể khác nhau. Để tìm thư mục, hãy tìm kiếm thông tin sau trong tệp php.ini của bạn.
upload_tmp_dir = "c: / wamp / tmp"
Thư mục có thể khác nhau đối với bạn.
<?php phpinfo() ?>
và tìm kiếmsession.save_path
.