PHP - докато цикълът (!feof()) не извежда/показва всичко

Опитвам се да прочета (и ехо) всичко от .txt файл.

Това е моят код:

$handle = @fopen("item_sets.txt", "r");

while (!feof($handle))
{
    $buffer = fgets($handle, 4096);
    $trimmed = trim($buffer);
    echo $trimmed;
}

Това е моят "item_sets.txt": http://pastebin.com/sxapZGuW

Но не отразява всичко (и променя колко показва в зависимост от това дали и колко знака повтарям след него). var_dump() ми показва, че последният низ никога не е приключил с отпечатването. Това изглежда така:

" string(45) ""[cu_well_tra. Но ако сложа

echo "whateverthisisjustarandomstringwithseveralcharacters";,

последните ми изходни редове изглеждат така:

" string(45) ""[cu_well_traveled_ak47]weapon_ak47" "1" " string(5) "} "

По принцип моят код не отпечатва/отразява всичко, което трябва или поне не го показва.

Благодаря предварително :)


person njoye    schedule 22.12.2015    source източник
comment
защо не използвате print file_get_contents() тук?   -  person ob_start    schedule 23.12.2015
comment
@ob_start все още не отпечатва всичко   -  person njoye    schedule 23.12.2015
comment
Няма нищо лошо в кода ви - той чете всички редове и ги извежда. Освен trim "изяжда" всички end of line маркери, така че когато ехирате, трябва да използвате PHP_EOL. аз, т.е. echo $trimmed, PHP_EOL;. В противен случай получавате един дълъг ред от изхода.   -  person Ryan Vincent    schedule 23.12.2015


Отговори (1)


Това е така, защото вашият тест за EOF е преди да изведете последното си четене

Опитайте това с теста за EOF като част от процеса на четене

<?php
$line_count = 0;

$handle = fopen("item_sets.txt", "r");

if ($handle) {

    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
        $line_count++;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

echo PHP_EOL.PHP_EOL.PHP_EOL.'Lines read from file = ' . $line_count;
?>

Също така премахнах @ пред fopen неговата лоша практика да игнорира грешките и много по-добра практика да ги търсим и да се справяме с тях.

Копирах вашите данни във файл, наречен tst.txt, и пуснах точния код

<?php
$handle = fopen('tst.txt', 'r');

if ($handle) {

    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

И генерира този резултат (само малка част, показана тук)

"item_sets"{"set_community_3"{"name"            "#CSGO_set_community_3""set_description"                "#CSGO_set_community_3_desc""is_collection"

И последният изход е

[aa_fade_revolver]weapon_revolver"          "1"

Което е последният запис във файла с данни

person RiggsFolly    schedule 22.12.2015
comment
Това също не отпечатва всичко :/ Може ли това да е просто проблем с изхода? - person njoye; 23.12.2015
comment
Добавете реда за отстраняване на грешки, за да видите дали изобщо обикаля този цикъл - person RiggsFolly; 23.12.2015
comment
Ами ... сега вече не показва нищо, буквално дори не показва моя html документ, който имах наоколо, освен лентата за навигация - person njoye; 23.12.2015
comment
И погледнахте ли във вашия php error log за някакви съвети. Също така не забравяйте, че виждам само това, което ми показахте, не виждам html, затова третирах това като самостоятелна част от кода - person RiggsFolly; 23.12.2015
comment
Последният регистър на регистъра на грешките беше, когато се опитах да го отпечатам с file_get_contents() - person njoye; 23.12.2015
comment
Какво се случва, когато премахнете реда за отстраняване на грешки - person RiggsFolly; 23.12.2015
comment
Показва ми, че $trimmed е 1 и това много пъти ... Чудя се, направих това преди с друг файл и там работеше добре. - person njoye; 23.12.2015
comment
Този файл изглежда като ПОЧТИ JSON низ, това ли трябва да бъде? - person RiggsFolly; 23.12.2015
comment
Но ... каква разлика би имало, ако просто го чета ред по ред и го записвам като низ? Всъщност не би трябвало да се влияе (поне аз така мисля). - person njoye; 23.12.2015
comment
Хммм, току-що го пробвах и да, дава много 11111111 позволете ми да играя за минута - person RiggsFolly; 23.12.2015
comment
Хаааааа. Вижте изменението. Всичко заради липсата на комплект скоби. Тук е късно, съжалявам, че го пропуснах напълно - person RiggsFolly; 23.12.2015
comment
Значи имате решение? :) - person njoye; 23.12.2015
comment
да Вижте допълнителните скоби в while (($buffer = fgets($handle, 4096)) !== false) { ред - person RiggsFolly; 23.12.2015
comment
И това отпечатва всичко във вашия код? Бихте ли могли да публикувате пълния код, защото все още не работи за мен ... - person njoye; 23.12.2015
comment
Не знам какво не е наред, дори сложих кода и текста на текстовия файл в друг файл и го пробвах, но все още не отпечатва всичко... - person njoye; 23.12.2015
comment
Нека продължим тази дискусия в чата. - person RiggsFolly; 23.12.2015