我应该预料到 WAMP 和 LAMP 堆栈之间会存在哪些不一致?

我应该预料到 WAMP 和 LAMP 堆栈之间会存在哪些不一致?

我习惯使用 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"].'/';
}

相关内容