2011-08-24 5 views
39

Tôi đã quen sử dụng công cụ virtualenv của python để tạo các môi trường riêng có thể bắt chước môi trường triển khai cho các dự án tôi viết.php có tương đương với virtualenv của python hay sandy của ruby ​​không?

Bây giờ, tôi sẽ làm việc trên một dự án php và tôi tự hỏi nếu có bất kỳ tương đương với điều đó? Cụ thể là tôi hy vọng sẽ có thể chạy một virtualhost trên apache với một (cũ) phiên bản của php, trong khi mọi thứ khác chạy trên phiên bản bình thường đến nay.

Máy phát triển của tôi đang chạy ubuntu 11.04, vì vậy các giải pháp hoạt động trên nền tảng đó sẽ được ưu tiên hơn.

+0

Tại sao bạn muốn có thứ gì đó như vậy?Bạn thấy đấy, PHP được tạo ra tương thích ngược. Ngay cả giữa các phiên bản 5.x khác nhau, hiếm khi có sự khác biệt gây khó chịu, và ngay cả khi những điều đó xảy ra, chúng thường dễ sửa chữa. Ví dụ giữa PHP 5.3 và 5.2 không có nhiều thay đổi được hapenned (http://pl2.php.net/manual/en/migration53.incompatible.php) - chỉ hai từ khóa mới và một số mã không hợp lệ không còn hoạt động ... – xfix

+6

@GlitchMr Tôi đang cố gắng sao chép chính xác môi trường triển khai trên một máy chủ phát triển để không có bất ngờ khi triển khai, nhưng tôi không muốn thiết lập một máy ảo hoàn toàn mới cho mọi môi trường triển khai. Nếu tôi có thể có virtualhost khác nhau trong apache sử dụng các phiên bản khác nhau của PHP, tôi sẽ là một chặng đường dài hướng tới việc hoàn thành điều này. – Zxaos

+0

Docker là giải pháp của bạn. Vagrant cho giải pháp khác. – JREAM

Trả lời

10

Giả sử bạn đang sử dụng mod_php, không có cách nào để tải nhiều phiên bản khác nhau vào cùng một cá thể Apache. Bạn có thể chạy nhiều phiên bản khác nhau nếu bạn đang chạy PHP như CGI hoặc FastCGI, nhưng điều này sẽ tự giới thiệu một số khác biệt trong hành vi từ mod_php.

2

(đã không được mã hóa php trong năm, vì vậy điều này có thể bị lỗi thời)

Theo như tôi nhớ bạn chỉ phải trỏ đến một thư mục nơi mà các thư viện của bạn cư trú (bao gồm PATH), sử dụng một cái gì đó như:

include_path = .:/usr/local/lib/php:./include (this goes in php.ini, default libararies) 

và trong các tập tin php của bạn:

ini_set("include_path", ".:../:./include:../include"); 

PHP bao giờ thực sự đã có một hệ thống đóng gói mạnh mẽ và kho thư viện như perl/python/ruby ​​đã, PEAR đang cố gắng mo theo hướng đó nhưng nó rất kín và khó cấu hình trong môi trường đa điểm.

Phark đang cố gắng xây dựng một cổng bia/gói cho php, https://github.com/lox/phark, mặc dù nó chưa được triển khai.

+0

Điều này có thể làm việc cho phiên bản thư viện, nhưng nó không có vẻ như nó sẽ làm việc để thay đổi phiên bản PHP lõi được sử dụng. – Zxaos

+0

đúng. đã chỉ ra tương đương virtualenv. (một thay thế pythonbrew là nhiều hơn những gì bạn đang tìm kiếm). – ashwoods

7

Khi tải các phiên bản khác nhau của php trong apache với mod_php có vẻ không khả thi, cách dễ nhất bắt chước triển khai và thiết lập phát triển sẽ là với máy ảo, mà bạn đã nói bạn muốn tránh.

Một cách làm cho gánh nặng của vm cho nhà phát triển dễ dàng hơn một chút là sử dụng một cái gì đó như vagrant. Với hai tập tin (tệp lang thang và tệp đầu bếp/con rối) bạn có thể "phiên bản" vm của bạn, dễ dàng tạo chúng và tiêu diệt chúng cho từng dự án và khi cần thiết.

5

Một giải pháp thay thế cho máy ảo là docker.

1

Hiện tại, không có giải pháp hộp cho vấn đề này. Các giải pháp duy nhất mà đến gần là Vagrant và puPHPet.com như đã thảo luận ở đây: https://drupal.org/node/2055947 Tại sao chúng ta không thể có một môi trường như virtualenv của python hoặc rbenv của ruby? Nó tạo nên một dự án mã nguồn mở tốt đẹp. Nhiều phiên bản của PHP có thể hữu ích nếu chúng ta muốn thử nghiệm một số thư viện trong các hộp cát thay vì trên toàn cầu. Chúng tôi có thể cài đặt các phụ thuộc cho các dự án khác nhau bằng cách sử dụng trình quản lý gói như Composer.

5

virtPHP là một công cụ để tạo và quản lý nhiều môi trường bị cô lập PHP trên một máy duy nhất. Nó giống như virtualenv của Python, nhưng đối với PHP. (README)

https://github.com/virtphp/virtphp

+1

Tính đến tháng 7 năm 2015, mặc dù, virtPHP chỉ nhắm vào dòng lệnh (php-cli) của php. Thật không may điều này sẽ không giúp đỡ với vấn đề như đã nêu. – Zxaos