php require_once windows和linux的路径区别

pho*_*nix 5 php linux windows relative-path require-once

我的 CakePHP 根文件夹中有一个文件位于名为 cron 的文件夹下。路径是:

c:/wamp/www/project/cron/daily.php
Run Code Online (Sandbox Code Playgroud)

此文件需要放置在蛋糕结构的供应商文件夹中的另一个文件,如下所示:

require("/../vendors/phpMailer/class.phpmailer.php");
Run Code Online (Sandbox Code Playgroud)

我从任务调度程序运行这个daily.php。这是我的开发站点中的场景。(Windows系统)。它按预期工作正常。当我将项目迁移到 Ubuntu(生产站点)时,require语句开始引起问题;它找不到所需的文件。我在那里做了一个小改动,如下所示:

require("../vendors/phpMailer/class.phpmailer.php"); <= removed the preceding slash
Run Code Online (Sandbox Code Playgroud)

它奏效了。所以我的疑问是,在寡妇和 Linux 中父目录表示法的工作方式有区别吗?如果是这样,我该如何克服?每次将项目从我的开发站点(windows)移动到生产站点(Linux)时,删除斜杠是不可行的。


我试过这个:

 require("./../vendors/phpMailer/class.phpmailer.php");
Run Code Online (Sandbox Code Playgroud)

它在linux中工作。但是在 Windows 中给出了“没有这样的文件目录”错误。似乎 Windows 仅适用于:

 require("/../vendors/phpMailer/class.phpmailer.php");
Run Code Online (Sandbox Code Playgroud)

解决方案

来自@TWCrap 的帮助问题解决如下:

require(dirname(__FILE__)."/../vendors/phpMailer/class.phpmailer.php");
Run Code Online (Sandbox Code Playgroud)

它适用于 windows 和 linux(* 喜悦之泪 *)。但在 Windows 中,它生成的路径为:

C:\wamp\www\project\cron/../vendors/phpMailer/class.phpmailer.php
Run Code Online (Sandbox Code Playgroud)

这条路看起来很丑,我希望它不会在未来引起问题!

-谢谢你们!

Mat*_*ght 5

我记得,当您在该行前面放置 1 个点时,您将从您所在的目录开始。那么该行必须如下所示:

require("./../vendors/phpMailer/class.phpmailer.php");
Run Code Online (Sandbox Code Playgroud)

这应该适用于 windows 和 linux ....