Làm cách nào để thiết lập các tệp php.ini trên mỗi trang trên máy chủ LAMP bằng NameVirtualhosts?


10

Tôi có một máy chủ LAMP phục vụ một số trang web khác nhau bằng NameVirtualhosts .

Cho đến gần đây, có một tệp php.ini toàn cầu vẫn hoạt động tốt, nhưng gần đây một trong những nhà phát triển của chúng tôi đã yêu cầu một số cài đặt trong php.ini mà tôi không muốn đặt trên toàn cầu.

Tôi khá chắc chắn rằng tôi đã nghe nói rằng bạn có thể thiết lập các tệp php.ini trên cơ sở từng trang web , nhưng không biết cách thực hiện việc này.

Ai đó có thể chỉ cho tôi đi đúng hướng làm thế nào để thực hiện điều này?

Câu trả lời:


14

Hầu hết các cài đặt mà bạn sẽ đặt trong php.ini cũng có thể được đặt trong .htaccess hoặc trong cấu hình apache cho trang web đó. Ví dụ: một trong những máy chủ ảo của tôi có cái này trong .htaccess

    php_value display_errors 1
    php_value register_globals 0
    php_value short_open_tag 0
    php_value magic_quotes_runtime 0
    php_value magic_quotes_gpc 0
    php_value session.name "PHPSESSID_SITEBLAH"
    php_value session.gc_maxlifetime 57600
    php_value session.gc_probability 1
    php_value session.gc_divisor 500

Điều này dường như không làm việc cho tôi. Có một số loại lệnh cần được đặt trong php.ini chính để cho phép điều này không?
Brent

1
"Tùy chọn AllowOverride" hoặc "AllowOverride All" nên được đặt trong cấu hình APache để làm việc này.
StackKrish

Chẳng hạn, các giá trị trong apache.confđó sẽ ghi đè lên các giá trị trong php.initệp của bạn hoặc theo cách khác?
puk

7

Bạn cũng có thể chỉ định cài đặt cấu hình trong tệp cấu hình Apache (httpd.conf / apache.conf). Trong trường hợp của bạn, bạn có thể chỉ định các giá trị cấu hình trong ngữ cảnh.

Ví dụ sau nên đặt upload_max_filesize thành 10M cho ví dụ máy chủ ảo.com.

<VirtualHost *>
    ServerName example.com
    DocumentRoot /path_to_docroot
    php_value upload_max_filesize 10M
    php_admin_flag allow_url_fopen on
</VirtualHost>

Nếu bạn không muốn đặt giá trị này cho toàn bộ trang web, nhưng đến một thư mục cụ thể nơi ứng dụng tồn tại, thì bạn có thể chỉ định các giá trị trong a.

<VirtualHost *>
   ServerName example.com
   DocumentRoot /path_to_docroot
  <Location /testApp/>
     php_value upload_max_filesize 10M
     php_admin_flag allow_url_fopen on
  </Location>
</VirtualHost>

Xem http://php.net/manual/en/configuration.changes.php để được giải thích thêm.


+1 Thật kỳ lạ, không có gì khác làm việc. Các tập tin htaccess cục bộ, php ini, không có cái nào hoạt động.
boot13

Cảm ơn! Có lẽ ai đó gặp phải vấn đề rằng các tham số bảo mật mod cần được ghi đè. Điều này chỉ hoạt động ở cấp độ vhost không ở cấp độ TRỰC TIẾP hoặc VỊ TRÍ. Lý do là mod-sec đang được cấu hình trước khi các thư mục hoặc khối vị trí được đọc.
ora-600

1

Một đề xuất khác là sử dụng mod-fastcgi hoặc mod-fcgi, chạy PHP như một trình nền độc lập riêng biệt. Sau đó, đối với mỗi trang web, bạn có thể xác định một tệp cấu hình người dùng và php.ini riêng.


1

Một tùy chọn khác là suPHP cho phép bạn xác định php.ini cho mỗi Virtualhost. Nó cũng cho phép bạn chỉ định một phiên bản PHP cho mỗi Virtualhost.

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.