是否有可能在Windows上有效开发PHP应用程序,这些应用程序将部署在运行Linux的服务器上?


19

在Windows上编写PHP并稍后在运行Linux的服务器上托管PHP可以吗?这样的项目的迁移会不会有任何问题?

我认为确实不会有任何问题,尤其是因为我是PHP的初学者,因此我不会使用任何特定于OS的高级功能。但是,我要确定一点,因为我真的根本不喜欢Linux。


1
解决此问题的简单方法是在Windows主机上运行Samba的Linux VM。
treecoder 2011年

是的,它可以完成,但是您必须考虑一些事项。查看答案以获取更多信息。这是开发人员由于资源而不是因为他们喜欢它而必须做的事情之一。
umlcat 2011年

Answers:


27

一些指针:

文件系统区分大小写

如果您的文件名为HelloWorld.php,则:

include "helloworld.php";

在Windows上是合法的,并且可以使用。但是Linux的文件名是区分大小写的,你可以有文件称为HelloWorld.phphelloworld.phphEllOwOrlD.php在同一个目录。因此,您应该像在区分大小写的文件系统上一样在Windows上进行开发:完全使用正确的文件名,目录名,扩展名- .php也不同于.PHP

目录和路径分隔符

在Windows中,我们说:

include 'classes\myClass.php';

但是在Linux中,我们会说:

include 'classes/myClass.php';

PHP足够聪明,可以忽略,两个分隔符都可以在两个系统中工作。但是您应该保持一致,并在所有地方都使用斜杠(/),因为它也是大多数系统上的标准。如果想走那么远,有一个漂亮的预定义常量 DIRECTORY_SEPARATOR可以转换为正确的常量

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

路径分隔符也一样,在Windows中为分号,否则为冒号。为了安全起见,您应该执行以下操作:

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

需要路径分隔符时。尽管大多数人认为由于PHP不介意使用哪个分隔符是可以的,但是有一个重要的要点:当您向系统询问目录或路径时,分隔符将是系统特定的分隔符。所以我们说要爆炸 include路径到它的部分:

$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!!!

文件编码和定界符

您应该将IDE设置为将所有脚本的文件编码设置为UTF-8而不是Cp *,并将文件行定界符设置为Unix("\n"而不是"\r\n")。在大多数情况下,这并不重要,但是您应该保持一致,最好的方法是Unix方法(在Windows上可以正常工作,反之亦然)。


1
对于可能会遇到换行符问题的字符串,PHP还包括PHP_EOL常量,该常量对当前平台使用正确的换行符。
乔纳森·帕特

5
人们实际上在PHP / Windows中的路径中使用反斜杠吗?即使我没有在Linux上第一次使用PHP,也要避免反斜杠,因为它们是用于转义内容。
cHao 2011年

2
不应该是“ classes \\ myClass.php”吗?
luiscubal

@luiscubal是的,因为我使用的是双引号...感谢您发现这一点,已将其编辑为单引号。
yannis

3
区分大小写和文件编码是在Windows / Linux之间经常引起麻烦的两个。
Rangoric 2011年

6

您不能运行strftime()%e在Windows环境下,如注意手册页

您的C库可能不支持所有转换说明符,在这种情况下,PHP的strftime()将不支持它们。此外,并非所有平台都支持负时间戳,因此您的日期范围不得超过Unix时代。这意味着%e,%T,%R和%D(可能还有其他)以及1970年1月1日之前的日期将无法在Windows,某些Linux发行版和其他一些操作系统上运行。对于Windows系统,可以在» MSDN中找到受支持的转换说明符的完整概述。


4

运行代码不会有任何问题。如果您确实编辑了Linux中Windows上保存的文件,则可能会注意到行尾字符可能有所不同,但这不会造成任何损害。如果确实如此,则将Windows IDE /编辑器配置为使用Unix行尾。


3

使用Linux测试平台进行设置。它可以是在Windows下运行的虚拟Linux计算机,也可以是双启动计算机,也可以是朋友的系统。然后,每隔一段时间(例如星期一早上)将您的代码移植到Linux系统上并进行测试。

其他答案解决了您将面临的主要问题,但是有许多较小的陷阱,例如:

  • 临时目录位于其他位置
  • 文件和目录权限不同
  • system()函数彻底改变
  • Apache作为更改运行的用户名
  • 在Windows XP下工作的东西在Windows 8下可能会失败。

是的,有多种方法可以仔细解决所有这些差异,但是您是否谨慎使用了替代方法?当然不是-您已编码并且可以运行,因此必须可以。

在类似操作系统上进行测试之前,请勿将任何东西放在主机上。

我没有从Windows移植到Linux的经验,但是我有从Linux移植到Windows的经验,还有从Linux移植到OS X的更多经验。可以做到,但是关键是测试,测试和测试。


1

即使我对Linux命令行和vim之类的Linux编辑工具相当满意,但我大部分的PHP开发都是在Windows计算机上进行的。

我在互联网上有一台虚拟服务器(每月大约要花20美元),用作开发服务器,并使用FileZilla连接到该服务器。FileZilla将我正在编辑的文件下载到一个临时目录中,并跟踪保存,当我保存时将其扔回到开发服务器上,然后从那里进行测试。

这有点麻烦,但是允许我几乎在任何地方进行开发;使用FileZilla和拇指驱动器上的简单编辑器,我什至可以从另一台计算机连接并进行更改。所有测试始终在Linux服务器上进行,因此我可以发现可能引起的任何问题-将代码投放到服务器上时,令人不快的惊喜更少。

您可以使用廉价的托管帐户执行相同的操作(尽管根据所开发的应用程序的类型,由于廉价的托管帐户通常功能不足,您可能会遇到性能问题),而其他许多FT​​P应用程序也具有编辑和上传功能。


1

是的,可以做到,但是您必须考虑几件事。查看答案以获取更多信息。

这是其中之一,有时候开发人员由于资源而不是因为他们喜欢它而不得不做。

您的PC可能安装了本地Web服务器(Apache,切诺基甚至M $)和PHP服务器。而且您的PC可能没有Internet连接,或者只能连接很短的时间。

以后,您可以更新一个真实的网站,使用ftp工具,通过连接到Internet的同一台PC或另一台PC,将文件更新到真实的服务器。


0

正如大多数人所说的那样,实际上应该没有问题。就是说,VirtualBox使安装Linux虚拟机变得非常非常容易,您可以在该虚拟机上测试您的代码库,以确保它在生产环境中可以正常工作,而无需使用生产环境。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.