PHP fopen 抛出了一个疯狂的错误 - 指的是不同的目录


PHP fopen is throwing a crazy error - refers to a different directory

这应该很简单,但我自己无法解决这个问题。

目的:将文本文件读入字符串,以便在<div>内回显。我以前做过这个,但在当前的程序中,目录结构似乎给了我适合。

设置:主页位于 LINUX 服务器上的特定目录中,/home4/mylogin/public_html/repository - 我们称之为 CWD(当前工作目录)。

主页包括文件读取功能,来自位于CWD/包含的功能.php文件。这是因为我想重用该函数来读取四个不同的文本文件,它们都位于不同的子目录中。(这与通过FTP授予其他人对这些文件的编辑访问权限有关)。

第一个文本文件位于 CWD/files/curator/curator.txt

当我尝试打开文本文件时,使用以下代码:

$handle = fopen($sourcepath,"r");

无论我如何构建$sourcepath变量,我都会收到错误。以下是我尝试过的一些变体$sourcepath

"/files/curator/curator.txt"
"files/curator/curator.txt" 
getcwd() . "/files/curator/curator.txt"
"http://www.websitename.com/repository/files/curator/curator.txt"
"/home4/mylogin/public_html/repository/files/curator/curator.txt"

当我打开页面时,它们都抛出相同的错误 - 这个:

fopen(/home4/dpm39110/public_html/repository/files/Curator/curator.txt):
failed to open stream: No such file or directory in /home4/mylogin
/public_html/repository/includes/functions.php on line 21

看起来fopen()函数正在尝试在 INCLUDE 目录中查找 txt 文件。这怎么可能?为什么它不查找我指向的目录?

顺便说一句,使用chdir("/files/curator/curator.txt")无济于事。

恐怕我只需要将文件读取功能从functions.php文件中移出并移动到主页代码中即可。

但是,我很想了解为什么会发生这种情况,以及如何防止下次发生这种情况。

建议?如果您能提供帮助,非常感谢!

使用__DIR__魔术常量总是一个好主意。它为您提供了执行脚本的当前指示,即编写脚本的位置。您可以使用:

// assume the script is in /home4/mylogin/public_html/includes/
$file = __DIR__ . '/../files/curator/curator.txt';
$handle = fopen($file);
//...

感谢您的输入 - 我将来一定会使用它。

但是,问题解决了!

我不好意思承认解决方案是多么基本。我决定尝试使用 file_exists() 函数,并在文件路径中发现了一个大写问题。所以Crossphire Development在钱上是对的。

嘶,额头一巴掌。脚本现在工作正常。

谢谢大家的想法和意见,我希望我能很快在这里为其他人提供一些帮助。