Hỏi kinh nghiệm đặt file config PHP

Như mình code một vài dự án, thường có các file xml, ini, json… để config mà không ảnh hưởng đến mã nguồn, hoặc có thể reload, load mà không cần restart app. Dạo này đang làm PHP, quen tay làm file config nên nhận thấy 2 vấn đề:

  1. Không cần thiết vì PHP có thể reload lại cả code luôn.
  2. Các file resource thường không mã hoá hoặc phân quyền, cho nên client cũng truy cập vào được, show hết cả lên.
    => Mình cho rằng PHP thì cứ thế đưa config vào code luôn cho tiện.

Bác nào có kinh nghiệm cho mình xin ý kiến với?

nếu bạn đang code framework thì có vẻ như câu hỏi này không cần thiết, vì hầu như framework nó design sẵn cho mình rồi
nếu bạn code thuần thì lúc đó mới cần quan tâm, mà chuyện resource bị client truy cập được thì lỗi không phải tai dev mà tại thằng ops, nếu lỗi do thằng dev thì chỉ là do thằng dev lười mà thôi, chốt lại là lòng vòng thì nỗi đó thuộc về 2 thằng thôi, còn nếu 2 thằng là 1 thì khỏi phải bàn

  1. => Mình cho rằng PHP thì cứ thế đưa config vào code luôn cho tiện.
    tiện thì có tiện nhưng không phải 100% trường hợp điều tiện.
    Ví dụ đơn giản là một số static data đó có thể hay thay đổi, mà data đó (ví dụ như xml chẳn hạn) có thể sinh ra do khách hàng hay nghiệp vụ export ra, có thể hay cập nhật. như vậy để xml vẫn tiện hơn. chưa kẻ6 dữ liệu đó rất lớn thì sao, ví dụ như dữ liệu về tỉnh - huyện - xã ở viện nam (thông minh chút có thể dùng replace để biến nó thành code php, hoặc tự code tool convert xml đó thành php luôn)

nói chung là tùy cơm gấp mắm thôi, tùy ngữ cảnh, không có cái nào thật sự hay hơn cái kia về mọi mặt cả

1 Like

Cái này mình nghĩ là tùy vào khẩu vị của từng nhóm, mà chính xác là do boss. Cách để config ở file php tồn tại từ lâu rồi và cũng dần ít được sử dụng. Cách này có lợi thế là cải thiện được tốc độ (mặc dù là micro-optimization) vì php sẽ được compiled thành opcode nên khi load không cần phải parse lại giống như khi sử dụng .env, xml, ini,…

PHP từ khi có zend-engine với composer thì workflow cũng ổn, sử dụng được trong enterprise. Tiếp đó là tồn tại các router-engine nên việc routing đến resource không cần phải như ngày xưa: index.php, forum.php nữa nên cấu trúc application cũng khác, configuration file cũng không nằm trong thư mục có thể access qua http-request nên tương đối an toàn.

Với m thì sử dụng .env, ini,… có lợi thế khi:

  1. Separate các environments, ví dụ .env.test cho unit-testing, .env.prod cho production
  2. Trong collaborate project, thường theo cách cũ thì file config chứa 1 array nội dung của configuration, mà {[\n, trong PHP dài dòng và khó tìm hơn plain ini file. Hơn nữa khi commit sẽ không cần phải để ý tên file là gì để tạo mới, cứ .env thôi.
  3. Trong automated CI/CD chỉ cần viết 1 docker file, mọi mật khẩu, đường dẫn… bí mật đều có thể đơn giản sửa qua linux command mà không phải lo syntax của PHP nữa, cái này là điểm cộng lớn nhất mà m dùng .env.
5 Likes

Mình code thuần thôi, không có framework vì trang đó xài nội bộ, là một cái tool bổ trợ cho dự án chính, mà máy nội bộ không có internet, lúi húi cắm USB thì lười nên code PHP cho nhanh. Mà ý tưởng code web cũng dẹp rồi, vì phát hiện ra một số vấn đề kỹ thuật nên phải tiếp cận theo hướng khác, vụ này đành gác lại. Cảm ơn mọi người đã cho lời khuyên.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?