我习惯使用 LAMP(Linux、Apache、MySQL、PHP)堆栈,但偶尔必须使用 WAMP(Windows...)堆栈来满足某些客户端要求。
我没有遇到任何显著的差异,但是我越来越多地看到这种要求,应用程序变得越来越苛刻和复杂。
- 我应该注意这两者之间的什么,或者我完全可以期待它们的行为相同吗?
请不要对堆栈或操作系统的选择发表评论,我只需要一个从一个移动到另一个以及反之亦然的陷阱列表。
-亚当
答案1
我想到的是以下几点:
- 区分大小写。Windows 不区分大小写,而 Linux 区分大小写。
- 路径分隔符。Windows 使用“;”,Linux 使用“:”
- 目录分隔符。Windows 使用“”,Linux 使用“/”
就目录分隔符而言,PHP 具有目录分隔符常量,我发现总是使用 Linux 变体“/”更方便,因为它在 Linux 和 Windows 中都有效。
答案2
MySQL 中两个平台的默认设置有所不同,特别是在表名的大小写敏感性方面。请确保您完全使用小写表名,或者在查询中始终正确使用大小写。
PHP 的 mail() 函数在 Windows 和 Linux 下有很大不同。如果您大量使用它的功能,则应仔细阅读手册。许多文件系统函数也因系统行为而不同(如 rename())。一般来说,对于任何与操作系统本身交互的函数,您可能都希望查看手册页以了解有关 Windows 下行为的评论。
答案3
php.ini 中有一些配置差异。例如,您的扩展将是 dll,您需要设置默认 smtp 服务器,而不是依赖 sendmail。不过,在阅读 ini 文件时,这一点很明显。我见过 WIMP 组合在生产中运行良好(因此 WAMP 会更加流畅)。所以我认为这主要是设置和配置,也许还有一些扩展的存在。
答案4
在上述其他项目中,我注意到 $_SERVER["DOCUMENT_ROOT"] 在 Windows 上以斜线结尾,而在 Linux 上则不是。
这不是一个大问题,对于嵌套的包含/重写,甚至只是链接 css/js,您都需要检查尾随斜杠的行为。
只是因为它很方便:) - 我有一个预先写好的功能。
function docroot() {
$needle = '/';
$haystack = $_SERVER["DOCUMENT_ROOT"];
$length = strlen($needle);
$end = $length * -1; //negative
if (substr($haystack, $end) === $needle)
return $_SERVER["DOCUMENT_ROOT"];
else
return $_SERVER["DOCUMENT_ROOT"].'/';
}