2008-09-22 39 views
5

Tôi chỉ muốn apache của tôi để đăng ký một số môi trường được xác định trước của tôi để tôi có thể lấy nó bằng cách sử dụng hàm getenv trong php. Tôi có thể làm cái này như thế nào? Tôi đã thử thêm /etc/profile.d/foo.sh với xuất FOO =/bar/baz bằng cách sử dụng root và apache khởi động lại.reinitialize biến môi trường hệ thống rộng trong linux

+0

Phân phối gì? Điều này tác động đến cách thực hành tốt nhất để làm điều này. – freespace

Trả lời

6

Biến môi trường được kế thừa bởi các quy trình trong Unix. Các tập tin trong /etc/profile.d chỉ được thực hiện (trong shell hiện tại, không phải trong một subshell) khi bạn đăng nhập. Chỉ cần thay đổi giá trị ở đó và sau đó khởi động lại một quá trình sẽ không cập nhật môi trường.

thể Sửa chữa:

  • log ra/đăng nhập, sau đó bắt đầu apache
  • nguồn tập tin: # . /etc/profile.d/foo.sh, sau đó khởi động lại apache
  • nguồn tập tin trong kịch bản apache init

Bạn cũng cần đảm bảo rằng /etc/profile.d/ có nguồn gốc khi Apache được bắt đầu bằng init thay vì chính bạn.

Khắc phục tốt nhất cũng có thể phụ thuộc vào phân phối bạn đang sử dụng, vì chúng sử dụng các lược đồ khác nhau để định cấu hình.

+0

Tốt. Hãy nhớ rằng init script của apache có thể thay đổi khi nâng cấp. –

0

Bạn có thể sử dụng SetEnv trong tệp cấu hình của mình (/etc/httpd/conf.d/*.conf, .htaccess ...). Ngoài ra, bạn có thể xác định chúng trong/etc/sysconfig/httpd (trên các bản phân phối dựa trên RPM) và xuất khẩu chúng (lưu ý: không được kiểm tra).

Lưu ý: nó sẽ không làm tôi ngạc nhiên nếu một số bản phân phối cố gắng khá nhiều để ẩn càng nhiều càng tốt, theo như cấu hình hệ thống, từ một dịch vụ công cộng có thể truy cập như Apache. Và nếu không, họ có thể bắt đầu làm điều này trong một phiên bản tương lai. Do đó tôi khuyên bạn nên làm điều này một cách rõ ràng. Nếu bạn cần chia sẻ như một thiết lập giữa Apache và vỏ của bạn, bạn có thể cố gắng tìm nguồn cung ứng /etc/profile.d/yourprofile.sh từ /etc/sysconfig/httpd

0

Apache tập tin cấu hình cho phép bạn thiết lập biến môi trường trên cơ sở mỗi trang web.

Vì vậy, nếu máy chủ web của bạn đang phục vụ các trang từ hai trang web logic, bạn có thể đặt cùng một biến môi trường khác nhau cho mỗi trang web và do đó làm cho PHP của bạn phản ứng khác nhau.

Xem Apache mod_env để biết chi tiết:

0

Nếu bạn cần env VAR chỉ Apache, những gì làm việc đối với tôi là chỉnh sửa /etc/apache2/envvars và khởi động lại Apache. Tôi đã thêm các cài đặt này:

export LANG='en_US.UTF-8' 
export LC_ALL='en_US.UTF-8' 
Các vấn đề liên quan