Странная ошибка, которую я получаю с php

Итак, у меня есть программа 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): не удалось открыть поток: неверный аргумент в C:\wamp\www\noahhuppert\Paralax v2\index.php в строке 45

Предупреждение: файл (posts/topDownShooter.txt): не удалось открыть поток: недопустимый аргумент в C:\wamp\www\noahhuppert\Paralax v2\index.php в строке 45

Пожалуйста помоги


person Noah Huppert    schedule 23.05.2013    source источник


Ответы (1)


Элементы массива, возвращаемые file(), имеют новую строку в конце каждой строки. Это недопустимый символ имени файла в Windows (он допустим в Unix, хотя было бы извращением включать символы новой строки в имя файла).

Из документации:

Каждая строка в результирующем массиве будет включать окончание строки, если только не используется FILE_IGNORE_NEW_LINES, поэтому вам все равно нужно использовать rtrim(), если вы не хотите, чтобы присутствовало окончание строки.

Ваш цикл также может быть значительно упрощен. Нет необходимости в переменных $fetchingPost или $endOfFile, просто проверьте конец в условии while().

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

В качестве альтернативы вы можете сделать:

$postsLines = file($posts, FILE_IGNORE_NEW_LINES);
person Barmar    schedule 23.05.2013
comment
Я думаю, что Бармар прав. Похоже, что в конце имени файла есть пробел. Попробуйте var_dump в строке имени файла и подсчитайте количество символов. Если это не сработает, я бы попробовал убрать пробел из исходного (родительского) пути. - person Homer6; 23.05.2013
comment
Я не минусовал. Ты не представляешь, как сильно ты спас меня там. - person Noah Huppert; 24.05.2013