Có thể phát triển hiệu quả các ứng dụng PHP trên Windows sẽ được triển khai trên các máy chủ chạy Linux không?


19

Có mã hóa PHP trên Windows và lưu trữ nó sau này trên máy chủ chạy Linux không? Có thể có bất kỳ vấn đề trong việc di chuyển của một dự án như vậy?

Tôi nghĩ rằng thực sự không thể có bất kỳ vấn đề nào, đặc biệt khi tôi là người mới bắt đầu sử dụng PHP và tôi sẽ không sử dụng bất kỳ chức năng nâng cao nào có thể dành riêng cho hệ điều hành. Tuy nhiên, tôi muốn chắc chắn vì tôi thực sự không thích Linux.


1
Giải pháp đơn giản cho vấn đề của bạn là máy ảo Linux có Samba chạy trên máy chủ Windows.
treecoder

Vâng, nó có thể được thực hiện, nhưng một số thứ bạn phải xem xét. Kiểm tra câu trả lời để biết thêm. Đó là một trong những điều mà các nhà phát triển phải làm, do tài nguyên chứ không phải vì họ thích nó.
umlcat

Câu trả lời:


27

Một số gợi ý:

Độ nhạy trường hợp hệ thống tập tin

Nếu tệp của bạn được gọi là HelloWorld.php này:

include "helloworld.php";

là hợp pháp trên Windows và sẽ hoạt động. Nhưng tên tập tin Linux là trường hợp nhạy cảm, bạn có thể có file gọi HelloWorld.php, helloworld.php, hEllOwOrlD.phptrong cùng thư mục. Vì vậy, bạn nên phát triển trên Windows như thể bạn đang phát triển trên một hệ thống tệp phân biệt chữ hoa chữ thường: sử dụng chính xác tên tệp, tên thư mục, tên mở rộng - .phpcũng khác với .PHP.

Thư mục và phân cách đường dẫn

Trong Windows, chúng tôi nói:

include 'classes\myClass.php';

Nhưng trong Linux, chúng ta sẽ nói:

include 'classes/myClass.php';

PHP đủ thông minh để không quan tâm, cả hai trình phân tách đều hoạt động trong cả hai hệ thống. Nhưng bạn nên nhất quán và đi với dấu gạch chéo (/) ở mọi nơi vì đó cũng là chuẩn mực trên hầu hết các hệ thống. Có một hằng số được xác định trước tiện lợi DIRECTORY_SEPARATORchuyển thành chính xác, nếu bạn muốn đi xa đến mức đó:

include "classes" . DIRECTORY_SEPARATOR . "myClass.php";

Điều tương tự cũng xảy ra với dấu phân cách đường dẫn, đó là dấu chấm phẩy trên Windows, ngược lại. Vì vậy, để an toàn bạn nên làm:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

khi cần một dải phân cách. Mặc dù hầu hết mọi người nghĩ rằng vì PHP không quan tâm đến việc bạn sử dụng trình phân tách nào nhưng nó vẫn ổn, nhưng có một nhược điểm quan trọng: Các phân cách sẽ là các phân tách cụ thể của hệ thống khi bạn hỏi hệ thống về các thư mục hoặc đường dẫn. Vì vậy, hãy nói rằng bạn muốn nổ bao gồm đường dẫn vào bộ phận của nó:

$includePath = get_include_path();

$pathParts = explode(";", $includePath) // Will only work on Windows
$pathParts = explode(":", $includePath) // Will work on other systems but not Windows
$pathParts = explode(PATH_SEPARATOR, $includePath) // Will work everywhere!!!

Mã hóa và dấu phân cách tệp

Bạn nên đặt IDE của mình để đặt mã hóa tệp cho tất cả các tập lệnh của bạn thành UTF-8 thay vì Cp * và phân cách dòng tệp thành Unix ( "\n"thay vì "\r\n"). Trong hầu hết các trường hợp, điều đó sẽ không thực sự quan trọng nhưng bạn nên nhất quán và cách tốt nhất là cách Unix (hoạt động tốt trên Windows nhưng không phải ngược lại).


1
Đối với các chuỗi nơi bạn có thể gặp phải các vấn đề về dòng mới, PHP cũng bao gồm hằng số PHP_EOL sử dụng ký tự dòng mới chính xác cho nền tảng hiện tại.
Jonathan Patt

5
Mọi người thực sự sử dụng dấu gạch chéo ngược trong đường dẫn của họ trong PHP / Windows? Ngay cả khi lần đầu tiên tôi không sử dụng PHP trên Linux, tôi sẽ tránh các dấu gạch chéo ngược chỉ vì chúng để thoát các thứ.
cHao

2
Không phải là "class \\ myClass.php" sao?
luiscubal

@luiscubal Có vì tôi đang sử dụng dấu ngoặc kép ... Cảm ơn bạn đã phát hiện ra điều đó, đã chỉnh sửa thành dấu ngoặc đơn.
yannis

3
Độ nhạy trường hợp và mã hóa tệp là hai yếu tố luôn gây rắc rối cho tôi giữa Windows / Linux.
Rangoric

6

Bạn không thể chạy strftime()với %etrong môi trường Windows, như được nêu trong trang hướng dẫn :

Không phải tất cả các công cụ xác định chuyển đổi đều có thể được thư viện C của bạn hỗ trợ, trong trường hợp đó, chúng sẽ không được hỗ trợ bởi strftime () của PHP. Ngoài ra, không phải tất cả các nền tảng đều hỗ trợ dấu thời gian âm, vì vậy phạm vi ngày của bạn có thể bị giới hạn không sớm hơn thời kỳ Unix. Điều này có nghĩa là% e,% T,% R và,% D (và có thể cả những người khác) - cũng như ngày trước ngày 1 tháng 1 năm 1970 - sẽ không hoạt động trên Windows, một số bản phân phối Linux và một vài hệ điều hành khác. Đối với các hệ thống Windows, có thể tìm thấy tổng quan đầy đủ về các chỉ định chuyển đổi được hỗ trợ tại » MSDN .


4

Sẽ không có vấn đề gì khi chạy mã. Nếu bạn chỉnh sửa các tệp được lưu trên Windows trong Linux, bạn có thể nhận thấy rằng các ký tự cuối dòng có thể khác nhau nhưng nó sẽ không gây hại gì. Nếu nó làm phiền bạn, hãy cấu hình Windows IDE / trình soạn thảo của bạn để sử dụng dòng cuối Unix.


3

Thiết lập bản thân với một thử nghiệm Linux. Nó có thể là một máy tính Linux ảo chạy trên Windows, nó có thể là một máy tính khởi động kép, nó có thể là một hệ thống của một người bạn. Sau đó, thỉnh thoảng (ví dụ buổi sáng thứ Hai), chuyển mã của bạn sang hệ thống Linux và kiểm tra nó.

Các câu trả lời khác xử lý các vấn đề chính mà bạn sẽ gặp phải, nhưng có rất nhiều vấn đề nhỏ hơn, như:

  • thư mục tạm thời ở một nơi khác
  • quyền truy cập tệp và thư mục là khác nhau
  • Hàm system () thay đổi triệt để
  • Tên người dùng mà Apache chạy khi thay đổi
  • Những thứ hoạt động trong Windows XP có thể thất bại trong Windows 8.

Vâng, có nhiều cách để làm việc cẩn thận xung quanh tất cả những khác biệt này, nhưng bạn có cẩn thận sử dụng các công việc xung quanh không? Tất nhiên là không - bạn đã mã hóa và nó chạy nên nó vẫn ổn.

Đừng đặt bất cứ thứ gì lên máy tính chủ cho đến khi nó được thử nghiệm trên một hệ điều hành tương tự.

Tôi không có kinh nghiệm chuyển từ Windows sang Linux, nhưng tôi có một số kinh nghiệm chuyển từ Linux sang Windows và có nhiều kinh nghiệm hơn khi chuyển từ Linux sang OS X. Điều đó có thể được thực hiện, nhưng các khóa là kiểm tra, thử nghiệm và kiểm tra.


1

Mặc dù tôi khá thoải mái với dòng lệnh Linux và với các công cụ chỉnh sửa Linux như vim, tôi thực hiện hầu hết sự phát triển PHP của mình trên máy tính Windows.

Tôi có một máy chủ ảo trên internet (chạy cho tôi khoảng 20 đô la mỗi tháng) mà tôi sử dụng làm máy chủ phát triển và tôi kết nối với nó bằng FileZilla. FileZilla tải xuống các tệp tôi đang chỉnh sửa vào thư mục tạm thời và theo dõi các bản lưu và khi tôi lưu, nó sẽ sao lưu nó vào máy chủ dev và tôi kiểm tra nó từ đó.

Nó hơi cồng kềnh, nhưng cho phép tôi phát triển khá nhiều ở mọi nơi; sử dụng FileZilla và trình chỉnh sửa đơn giản trên ổ USB, tôi thậm chí có thể kết nối từ một máy tính khác và thực hiện các thay đổi. Tất cả các thử nghiệm luôn luôn có trên máy chủ Linux, vì vậy tôi nắm bắt được bất kỳ vấn đề nào tôi có thể đã gây ra ngoài hộp - ít sự khó chịu hơn khi tôi ném mã lên máy chủ.

Bạn có thể làm điều tương tự với tài khoản lưu trữ giá rẻ (mặc dù tùy thuộc vào loại ứng dụng bạn đang phát triển, bạn có thể gặp phải các vấn đề về hiệu suất do tài khoản lưu trữ giá rẻ thường không đủ mạnh) và nhiều ứng dụng FTP khác cũng có chỉnh sửa và chức năng tải lên.


1

Vâng, nó có thể được thực hiện, nhưng một số thứ bạn phải xem xét. Kiểm tra câu trả lời để biết thêm.

Đó là một trong những điều đó, đôi khi các nhà phát triển phải làm, do tài nguyên chứ không phải vì họ thích nó.

Bạn có thể có một máy chủ web cục bộ (apache, cherokee, thậm chí M $), trong PC và máy chủ PHP được cài đặt. Và PC của bạn, có thể không có kết nối Internet hoặc chỉ có thể kết nối trong khoảng thời gian ngắn.

Sau đó, bạn có thể cập nhật một trang web thực, cập nhật tệp của mình lên máy chủ thực, với các công cụ ftp, với cùng một PC hoặc một PC khác, được kết nối với internet.


0

Như hầu hết mọi người nói thực sự không nên có vấn đề. Điều đó nói rằng, VirtualBox làm cho nó thực sự rất dễ dàng để đứng lên một máy ảo linux mà bạn có thể kiểm tra cơ sở mã của mình để đảm bảo nó hoạt động trong môi trường sản xuất mà không cần nói môi trường sản xuất tiện dụng.

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.