2010-02-28 27 views
5

Tôi không nghĩ rằng việc sử dụng tệp .ini hoặc .xml là ý tưởng hay với các dự án có lưu lượng truy cập cao vì mỗi lần tải trang đều gây ra phân tích cú pháp tệp config.ini hoặc .xml.(Zend Framework> Zend_Config) Cách tránh sử dụng cấu hình .ini hoặc .xml?

Có cách nào để thay thế bằng .ini/.xml bằng mảng php thông thường làm cấu hình không? vẻ ini Bây giờ php như thế ...

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
phpSettings.date.timezone = "Europe/London" 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.db.adapter = PDO_MYSQL 
resources.db.params.host = localhost 
resources.db.params.username = rob 
resources.db.params.password = 123456 
resources.db.params.dbname = zf-tutorial 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.view.doctype = "XHTML1_STRICT" 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Tôi muốn một cái gì đó như thế này ...

<?php 

$config = array(
    'production' => array(
     ['phpSettings.display_startup_errors'] => 0, 
     ['phpSettings.display_errors'] => 0, 
    ), 
); 

Có thể? Tôi nên làm gì và làm cách nào để yêu cầu ứng dụng sử dụng Config.php của riêng mình?

Cảm ơn và xin lỗi vì tiếng Anh của tôi.

UPD: Tôi nghĩ rằng việc truyền mảng tới hàm tạo Zend_Application là đúng cách?

Trả lời

8

Có, bạn có thể sử dụng mảng để khởi tạo dữ liệu cho đối tượng Zend_Config; hãy nhìn vào this page of the Zend Framework manual(trích dẫn những gì arround Ví dụ # 1):

Thông thường đó là mong rằng người dùng sẽ sử dụng một trong các lớp chuyển đổi như Zend_Config_Ini hoặc Zend_Config_Xml, nhưng nếu cấu hình dữ liệu có sẵn trong một mảng PHP, một có thể chỉ cần truyền dữ liệu đến số Zend_Config hàm tạo để sử dụng giao diện đơn giản theo định hướng


Bạn cũng nên có một cái nhìn tại Ví dụ # 2 trên the same page(trích dẫn những gì arround nó):

Nó thường là mong muốn sử dụng một tập tin cấu hình dựa trên PHP tinh khiết . Các mã sau minh họa cách dễ dàng này có thể được thực

Về cơ bản, đầu tiên bạn tạo một file PHP có chứa các cấu hình:

// config.php 
return array(
    ... 
    ... 
); 

Và, sau đó, từ một tập tin, sử dụng hơn tập tin cấu hình :

$config = new Zend_Config(require 'config.php'); 


Nhưng lưu ý rằng làm điều đó, bạn sẽ mất khả năng dễ dàng thay đổi cấu hình, ghi lại tệp .ini - tùy thuộc vào tình huống của bạn, cuối cùng có thể (hoặc không) là một vấn đề.

Một giải pháp có thể được sử dụng là bộ nhớ cache dữ liệu Zend_Config:

  • đã đọc nó từ .ini tập tin
  • Lưu trữ nó vào một số bộ nhớ đệm mecanism
  • Và, cho các trang tiếp theo, tải nó từ bộ nhớ cache, thay vì phân tích lại tệp .ini.
+1

"Và, đối với các trang tiếp theo, hãy tải nó từ bộ nhớ cache, thay vì phân tích cú pháp tệp .ini". - Tôi sẽ lưu trữ dữ liệu đã lưu vào bộ nhớ đệm trong một thứ gì đó như văn bản được tuần tự hóa và tôi nên bỏ lưu trữ nó mỗi lần nữa. Nó không phải là cách chữa trị. Sử dụng mảng php là cách duy nhất để tăng tốc độ tải cấu hình. Vâng, tôi sẽ không thể viết thư cho cấu hình, nhưng nó là ok cho tình hình của tôi. Cảm ơn bạn vì câu trả lời. – Kirzilla

+0

Bạn được chào đón :-) ;;; Nếu bạn không cần phải ghi vào tập tin cấu hình, sau đó, tôi cho rằng lưu trữ nó trong một tập tin '.php' sẽ được thực sự tốt :-) ;;; Về caching và de-serialization: nó sẽ nhanh hơn rất nhiều so với việc phân tích một tệp '.ini' /' .xml': bạn sẽ deserialize một đối tượng đã tồn tại, thay vì tạo lại nó từ đầu * (như bạn đang làm khi cấu hình được lưu trữ trong tệp '.php') * –

+0

Hoặc bạn có thể sử dụng sth. như Memcached;) Điều đó sẽ không yêu cầu serialization, phải không? –

1

Phương pháp tốt hơn là lưu vào bộ nhớ cache kết quả phân tích cú pháp php.ini. Nhưng tôi không nghĩ rằng điều này thực sự sẽ gây ra cho bạn bất kỳ vấn đề gì.

+1

Dường như với tôi rằng không thể cache phân tích cú pháp php.ini. Tôi có thể lưu trữ dữ liệu tuần tự, nhưng tôi sẽ cần phải unserialize nó mọi lần nữa. – Kirzilla

1

Tốt nhất nên lưu bộ nhớ cache với ít nhất APC hoặc bất kỳ bộ đệm opcode nào, xử lý tệp cấu hình .ini với Zend_Config là rất rộng CPU, đặc biệt khi sử dụng toArray().

Các vấn đề liên quan