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

时间:2016-02-21 23:52:26

标签: php fopen

这应该很简单,但我自己也搞砸了。

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

设置:主页面位于LINUX服务器上的特定目录/home4/mylogin/public_html/repository - 让我们调用CWD(当前工作目录)。

主页面包含位于CWD / includes的functions.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()函数试图在INCLUDES目录中找到txt文件。怎么会这样?为什么不在我指向的目录中查找?

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

我担心我只需要将文件读取功能从functions.php文件移到主页面代码中。

然而,我很想知道为什么会这样,以及如何防止它下次发生。

连连呢?如果你能提供帮助,非常感谢!

2 个答案:

答案 0 :(得分:1)

使用__DIR__魔法常量总是一个好主意。它为您提供了执行脚本的当前指示,其中已写入。你可以使用:

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

答案 1 :(得分:0)

感谢您的投入 - 我将来肯定会使用它。

然而,问题已得到解决!

我很尴尬地承认解决方案的基本要素。我决定使用file_exists()函数,并在文件路径中发现了CAPITALIZATION问题。因此,Crossphire Development的资金就是正确的。

Grrr,额头一巴掌。脚本现在工作得很好。

感谢大家的意见和建议,我希望我能尽快为其他人提供帮助。