文件已存在但PHP报错"failed to open stream: no such file or directory"

4

我正在尝试从我的服务器上的一个 .txt 文件中提取一个随机字符串,以便在网站页脚中显示。这是我正在使用的代码(前两行纯粹是为了调试):

<div id="footer">
    <div class="instructions">
        <?php
            $file = include_once 'facts.txt';
            echo dirname(__FILE__);
            $f_contents = file('facts.txt');
            $line = $f_contents[array_rand ($f_contents)];
            echo $line;
        ?>
    </div>
</div>

这是我底部显示的内容:

TEST LINE - FOR TESTING PURPOSES.

/HOME/LEWIHTYV/PUBLIC_HTML/WP-CONTENT/THEMES/LEWNACY

WARNING: FILE(FACTS.TXT) [FUNCTION.FILE]: FAILED TO OPEN STREAM: NO SUCH FILE OR DIRECTORY IN /HOME/LEWIHTYV/PUBLIC_HTML/WP-CONTENT/THEMES/LEWNACY/FOOTER.PHP ON LINE 6

WARNING: ARRAY_RAND() EXPECTS PARAMETER 1 TO BE ARRAY, BOOLEAN GIVEN IN /HOME/LEWIHTYV/PUBLIC_HTML/WP-CONTENT/THEMES/LEWNACY/FOOTER.PHP ON LINE 7

由于某种原因,尽管文件被正确识别并且目录也正确(footer.php和facts.txt文件都在同一个目录中),但随机行选择会引发此错误。我已经使用WAMP在本地测试过此代码,并且没有任何问题。我还检查了文件权限以确保它是可读的。


1
这里不应该使用 include_once。同时,如果你获得了目录,就将其保存在一个变量中。然后在 file($dir . 'facts.txt'); 中添加该变量。 - Elin
@Rizier123 echo $file; 返回 1 - lewisj
@lewisj 那么文件路径怎么了?那看起来不像是Windows路径? - Dan
@dan08 抱歉,我误解了你的意思 - 服务器确实是Linux。 - lewisj
经常会遇到这个错误,为了快速排除故障,请按照以下步骤操作:https://dev59.com/LVoV5IYBdhLWcg3wL8Ww#36577021 - Vic Seedoubleyew
显示剩余4条评论
1个回答

1
答案是 PHP 不会自动假设 "facts.txt" 在运行的 PHP 文件所在的相同目录中。您需要告诉它完整的路径。
尝试使用以下代码:
$f_contents = file(dirname(__FILE__) . '/facts.txt');

谢谢 - 这个有效!我对PHP还比较陌生,所以我不知道这个。 - lewisj
1
如果您拥有PHP> = 5.3,则可以使用__DIR__代替 dirname(__FILE__) - Austin
现在有一个针对这个常见错误的故障排除清单,网址为: stackoverflow.com/a/36577021/2873507 - Vic Seedoubleyew

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