2008-11-12 38 views
7

Tôi đã viết một ứng dụng PHP nhỏ mà tôi muốn phân phối. Tôi đang tìm các phương pháp hay nhất để nó có thể được cài đặt trên hầu hết các máy chủ web với những rắc rối tối thiểu.Phân phối một ứng dụng PHP nhỏ

Tóm tắt: Đây là công cụ đơn giản cho phép mọi người tải xuống tệp khi họ đăng nhập bằng mật khẩu.

Vì vậy, câu hỏi của tôi là:

1) Tôi nên xử lý các giá trị cấu hình như thế nào? Tôi không sử dụng một cơ sở dữ liệu, do đó, một tập tin cấu hình có vẻ thích hợp. Tôi biết rằng các ứng dụng php khác (ví dụ: Wordpress) sử dụng định nghĩa, nhưng chúng là toàn cầu và có tiềm năng rằng các tên sẽ xung đột. (Các biến toàn cầu cũng có cùng một vấn đề, rõ ràng.) Tôi đã xem xét cơ chế tệp "ini" được xây dựng trong PHP. Nó chỉ cho phép nhận xét ở trên cùng - vì vậy bạn không thể chú thích từng cài đặt một cách dễ dàng - và bạn không thể xác thực cú pháp bằng "php -f". Sự lựa chọn khác?

2) Cách xử lý templating? Ứng dụng cần bơm một biểu mẫu. Có thể có thông báo lỗi. (ví dụ: "Xin lỗi, mật khẩu sai"). Tôi đã có biến lớp với biểu mẫu HTML, nhưng cũng cho phép tệp mẫu bên ngoài được sử dụng thay thế (được chỉ định trong cấu hình). Tôi thực hiện một số tìm kiếm nhỏ và thay thế - ví dụ: % SCRIPT% vào tên của tập lệnh,% STATUS% để giữ thông báo lỗi. Điều này cảm thấy một chút giống như phát minh lại bánh xe, nhưng bao gồm một hệ thống templating như Smarty là overkill. (Plus họ có thể đã có một hệ thống templating.) Các tùy chọn khác?

3) i18n - Chỉ có 3 chuỗi thư và gettext dường như không được cài đặt chung. Có phải đó là một ý tưởng tồi khi chỉ thực hiện ba tham số chuỗi này trong tệp cấu hình?

4) Cách tích hợp tốt nhất với các khung công tác khác? Ứng dụng của tôi là một lớp duy nhất. Vì vậy, tôi nghĩ rằng tôi chỉ có thể bao gồm một tập lệnh php cho thấy lớp học được gọi như thế nào. Nó sẽ là một điểm khởi đầu cho những người đã tích hợp nó vào một khuôn khổ khác, nhưng cũng tốt cho những người không quan tâm đến việc tùy biến. Hợp lý?

5) tham số GET/POST - Có phải biểu mẫu xấu cho lớp học đang xem ở $ _GET và $ _POST không? Tất cả các giá trị có nên được chuyển vào lớp của tôi trong quá trình xây dựng không?

Cảm ơn.

Trả lời

7

Cấu hình

Bạn có thể sử dụng một file php như thế này:

<?php 
return array(
    'option1' =&gt; 'foobar', 
    'option2' =&gt; 123, 
    //and so on... 
); 
?> 

Và trong những lớp học chính chỉ cần sử dụng:

$config = (array) include 'path/to/config/file'; 

Và nếu bạn có kế hoạch chủ yếu là phân phối lớp học của bạn như một thành phần trong các ứng dụng khác, sau đó chỉ cần đặt mảng/đối tượng cấu hình làm tham số trong trình tạo lớp của bạn và để lại chi tiết cho người dùng.

Templating

Để đơn giản như vậy, phương pháp mô tả của bạn là đủ. Hãy nhớ rằng người ta luôn có thể mở rộng lớp của bạn và quá tải phương pháp xuất của bạn với chính mình.

I10N

Như đã đề cập trước đó, cho 3 biến hơn bất kỳ lưu trữ chúng làm cấu hình chỉ là quá mức cần thiết.

Integration

Comment mỗi phương pháp công cộng (hoặc thậm chí tốt hơn cũng được bảo vệ và tư thục) với lời giải thích những gì họ làm và những gì các thông số cần thiết. Nếu bạn kết hợp nó với một ví dụ, nó sẽ là đủ cho hầu hết người dùng.

GET và POST

Lớp học của bạn sử dụng mật khẩu và bạn thậm chí nghĩ gửi chúng qua GET? ;) Hãy suy nghĩ về lịch sử trình duyệt, tiêu đề tham chiếu, v.v. - mật khẩu của người dùng của bạn sẽ hiển thị ở đó.

+0

Tôi thích kiểu cấu hình đó! Tôi sẽ thử nó ngay bây giờ. –

2
  1. Có thể định cấu hình cục bộ cho các phiên bản lớp không? Hoặc bạn có thể tạo một lớp nhỏ mà bạn có thể tạo một cá thể truy vấn cho các giá trị cấu hình không? Ngoài ra, hãy chuẩn bị trước bất kỳ vars toàn cầu nào với tên ứng dụng của bạn, nên đi một số cách để ngăn chặn các xung đột.

  2. Nếu templating của bạn thực sự đơn giản, chỉ cần viết một templater ngắn. Nó sẽ dễ dàng hơn so với cố gắng để chống đỡ những vấn đề mà mọi người gặp phải với bất kỳ bên thứ ba nào. Nó cũng có thể đơn giản hóa các vấn đề cấp phép. Nếu bạn bắt đầu lo lắng về những gì họ đã có, bạn sẽ không bao giờ phát hành bất cứ điều gì. Có quá nhiều kết hợp.

  3. Đối với 3 chuỗi? Vâng làm những điều tương tự như bạn đang xử lý cấu hình.

  4. Nhận xét tốt trong suốt với phần giới thiệu giải thích cách bạn sử dụng lớp học.

  5. Tôi không nghĩ vậy. Nếu nó làm phiền bạn, bạn có thể sử dụng đối số mặc định để sử dụng đối số cho trước, sau đó tìm kiếm các giá trị GET/POST nếu không được cung cấp (mặc dù đó có thể là một nguy cơ bảo mật)

Có những thứ khác để đưa vào xem xét.Rất nhiều người trên máy chủ chia sẻ và kết quả là, không có quyền kiểm soát php.ini của họ hoặc phiên bản php của họ. Bạn cần đảm bảo rằng bạn chỉ sử dụng các tính năng phổ biến nhất có thể.

Một ví dụ là shorttags không được kích hoạt trên một số máy chủ (bạn phải sử dụng <?php ... ?><?php echo "..."?> thay vì <? ... ?> hoặc <?= "..." ?>) có thể là một Pita hoàng gia.

2

Ngoài lời khuyên tốt Krzysztof của:

  • Sử dụng <?php chỉ
  • Nếu bạn sử dụng chức năng mà có thể bị vô hiệu hóa, sử dụng function_exists() để đảm bảo chúng có sẵn. @missing_function() làm cho PHP chết lặng lẽ mà không có bất kỳ lỗi nào được ghi lại.
  • Bạn không thể dựa vào những thứ có thể bị vô hiệu hóa/thay đổi thông qua php.ini. Sử dụng ini_get() để thích ứng với các cài đặt khác nhau.
  • Nếu magic_quotes được bật, chỉ bị gạch chéo từ bản sao dữ liệu nhập của bạn - không sửa đổi mảng toàn cầu! An ninh của một số mã lame có thể dựa vào những dấu gạch chéo đang có mặt.
  • Mong rằng người dùng sẽ mindlessly sao chép & dán mã từ tài liệu/trang web của bạn.
+0

"Sử dụng ", Không cần thiết nếu nó là ký tự cuối cùng của tệp. –

+0

Tôi nhận được rằng các thẻ ngắn có thể gây ra vấn đề - các tệp PHP của tôi là tất cả PHP, vì vậy đây không phải là vấn đề lớn. Nhưng những gì bỏ qua '?>' Mua cho tôi? (Ít rủi ro thêm không gian vô ý?) –

+0

Bạn không có nguy cơ xuất ra khoảng trắng ở cuối tệp - điều này có thể xấu nếu bạn muốn gửi tiêu đề http sau trong ứng dụng, ví dụ như phiên bắt đầu. Tất nhiên bạn có thể bỏ qua vấn đề này với bộ đệm đầu ra. –

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