PHP:没有这样的文件或目录。

3

我发现一个错误,很难调试,因为:

  1. 它只发生在远程服务器上(但不是所有的服务器),而不是在我的本地开发平台上,

  2. 我不确定从哪里开始寻找或者要调查什么PHP设置,尽管我怀疑问题与远程服务器环境有关。

另外一个复杂性是,在我开发的大型多模块脚本中,这个问题只会出现在tinyMCE的实现中。一个典型的问题是:

警告:include_once(core/startup/GLOBALS.php) [function.include-once]:无法打开流:在/home/wikindx/www/www/wikindx4/core/tiny_mce/plugins/wikindxLink/dialog.php 的第33行没有这样的文件或目录

所以除了在服务器环境设置中可能需要找到一个解决方案之外,我可能需要改变一些tinyMCE设置——我已经多次在tinyMCE论坛上寻求帮助,但没有得到任何回应。

这在我的本地平台和其他远程服务器上都可以正常工作。不用说,GLOBALS.php在core/startup/中,但我不能硬编码为在/home/wikindx/www/www/wikindx4/core/startup/中找到它,因为这些脚本必须在任何服务器上工作。

编辑:我真的怀疑它与tinyMCE环境有关,因为导致问题的服务器安装在调用include_once(core/startup/GLOBALS.php)时没有任何问题,当那个调用在tinyMCE系统之外时。tinyMCE中的某些东西改变了include_once()所寻找的路径。


很可能你是在Windows上开发,而服务器是*nix?在这种情况下,你应该记住,在Windows上文件名不区分大小写,但在Linux上是区分大小写的:大小写有关系。如果不是这种情况,请检查你的include_path。我通常喜欢根据它们所在的目录包含文件,因此这将使它成为require __DIR__.'/../../../startup/GLOBALS.php'; - Wrikken
在OsX上开发。由于上述原因,我无法使用您的硬编码路径解决方案。 - Mark Grimshaw
我不明白为什么那个相对路径的包含无法工作。或者你是说你include了一个实际上不属于你的包的文件,所以与相关全局文件的路径关系无法正常工作?换句话说:dialog.php并不属于与GLOBALS.php相同的包,但出于某种原因仍然知道它的存在,并希望从“某个地方”包含它? - Wrikken
我不明白为什么它也不能工作。它们是同一个包的一部分,core/tiny_mce/plugins/wikindxLink/dialog.php 调用 core/startup/GLOBALS.php,其中 core/ 是两个路径的相同目录。在我的 OsX 本地开发系统上运行良好,但在至少两个远程主机上无法正常工作。 - Mark Grimshaw
你误解了我的意思。为什么在 dialog.php 中使用 require __DIR__.'/../../../startup/GLOBALS.php'; 不是一个选项? - Wrikken
成功解决了问题,虽然不是完全按照你的建议,但是受到了启发,采用了类似的方法。我仍然认为在tinyMCE环境中设置了一些奇怪的东西。感谢你的帮助。 - Mark Grimshaw
1个回答

2
我认为您在寻找$_SERVER ['DOCUMENT_ROOT']:
(该代码为PHP中的全局变量,用于返回当前执行脚本所在的文档根目录的绝对路径。)
include_once $_SERVER['DOCUMENT_ROOT'].'core/startup/GLOBALS.php';

在您当前的服务器上,该值将为/home/wikindx/www/www/wikindx4/


尝试在我的本地系统上运行(之前可以正常工作),现在出现以下错误:include_once():无法打开'/Applications/XAMPP/xamppfiles/htdocs/core/startup/GLOBALS.php'进行包含(include_path ='.:/Applications/XAMPP/xamppfiles/lib/php')in /Applications/XAMPP/xamppfiles/htdocs/wikindx4/trunk。 - Mark Grimshaw
由于脚本必须在各种情况和安装路径中可用,我不能硬编码缺少的路径信息。 - Mark Grimshaw
请注意,DOCUMENT_ROOT相当可靠,但对于带有VirtualDocumentRoot指令的Apache虚拟主机则不是。 - Wrikken
你可以自己编写一个函数来获取绝对路径。可以基于 $_SERVER 和 pwd() 值等进行编写 :) 将该值分配给一个常量,然后您就可以在任何地方使用它了。 - Martijn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接