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): ストリームを開くことができませんでした: C:\wamp\www\noahhuppert\Paralax v2\index.php の 45 行目の引数が無効です

警告: ファイル (posts/topDownShooter.txt): ストリームを開くことができませんでした: C:\wamp\www\noahhuppert\Paralax v2\index.php の 45 行目の引数が無効です

助けてください

4

1 に答える 1

0

によって返される配列の要素には、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);
于 2013-05-23T01:48:48.640 に答える