0

所以我有一个PHP程序,它来自文本文件的一行。然后它使用它读取的那一行文本指向另一个文本文件

$posts = "posts/posts.txt";
$postsLines = file($posts);
$fetchingPost = TRUE;
$postNumber = 0;
$postPointer;
$postPointerString;
$postLines;
$postTag;
$postTitle;
$postContent;
$endCondition = "end";

while ($fetchingPost == TRUE) {

    $endOfFile = strcmp($postsLines[$postNumber], $endCondition);
    if ($endOfFile == 0) {
        $fetchingPost = FALSE;
    }

    if ($endOfFile <> 0) {
        $postPointer[$postNumber] = $postsLines[$postNumber];
        $postLines = file($postPointer[$postNumber]);
        $postNumber = $postNumber + 1;
    }
}

当我运行它时出现此错误,我使用的是 WAMP 服务器

警告:文件(posts/leapMotionSandbox.txt):无法打开流:第 45 行 C:\wamp\www\noahhuppert\Paralax v2\index.php 中的参数无效

警告:文件(posts/topDownShooter.txt):无法打开流:第 45 行 C:\wamp\www\noahhuppert\Paralax v2\index.php 中的参数无效

请帮忙

4

1 回答 1

0

由返回的数组元素file()在每行末尾都有一个换行符。这在 Windows 上不是有效的文件名字符(它在 Unix 上有效,尽管在文件名中包含换行符是不正当的)。

文档中:

结果数组中的每一行都将包含行尾,除非使用 FILE_IGNORE_NEW_LINES,因此如果您不希望出现行尾,您仍然需要使用 rtrim()。

您的循环也可以大大简化。不需要$fetchingPostor$endOfFile变量,只需测试while()条件中的结尾即可。

while (($line = rtrim($postsLines[$postNumber]) != $endCondition) {
    $postPointer[$postNumber] = $line;
    $postLines = file($line);
    $postNumber++;
}

或者,您可以执行以下操作:

$postsLines = file($posts, FILE_IGNORE_NEW_LINES);
于 2013-05-23T01:48:48.640 回答