5

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

c:/wamp/www/project/cron/daily.php

该文件需要在 cake 结构的 vendor 文件夹中放置另一个文件,如下所示:

require("/../vendors/phpMailer/class.phpmailer.php");

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

require("../vendors/phpMailer/class.phpmailer.php"); <= removed the preceding slash

它奏效了。所以我的疑问是,父目录符号在寡妇和 Linux 中的工作方式有什么不同吗?如果是这样,我该如何克服?每次我将项目从我的开发站点(Windows)移动到生产站点(Linux)时,删除一个斜线是不可行的。


我试过这个:

 require("./../vendors/phpMailer/class.phpmailer.php");

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

 require("/../vendors/phpMailer/class.phpmailer.php");

解决方案

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

require(dirname(__FILE__)."/../vendors/phpMailer/class.phpmailer.php");

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

C:\wamp\www\project\cron/../vendors/phpMailer/class.phpmailer.php

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

-多谢你们!

4

3 回答 3

5

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

require("./../vendors/phpMailer/class.phpmailer.php");

这应该适用于Windows和Linux....

于 2012-09-07T10:57:21.197 回答
1

如果您确实不需要,请不要使用绝对路径。正确设置更安全,更好,include_path因此在移动的情况下,您只需调整一个设置,而不是挖掘整个项目及其所有文件。

所以我的疑问是,父目录符号在寡妇和 Linux 中的工作方式有什么不同吗?

/(ie /foo/bar) 开头的路径是绝对路径,因为开头/表示根文件夹。在 Windows 上,你有驱动器号。

我还建议使用require_once以避免重复的要求(如果您将 HTML 与代码混合使用,这是可以的,但无论如何不建议使用“意大利面条代码”),但可能会导致代码出现问题

于 2012-09-07T10:57:55.927 回答
0

问题是,至少在 UNIX 系统上,当您在文件路径上以斜杠开头时,您从根目录开始。

您应该在两个系统上都写 ./../ *或只写 ../ 。它应该同时工作。

于 2012-09-07T10:58:22.337 回答