[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поблочное считывание XML
eMASTER
В цикле вызывается рекурсивная функция,<br>но после этого управление обратно в цикл не возвращается. Не понимаю что не так :(<br><br>
 <?php
 
$file = "books.xml";
$data = "";
 
if (!($f = fopen($file, "r"))) {
    die("could not open XML input");
}
 
if (!($ff = fopen("final.txt", "w"))) {
    die("could not open result file");
}
 
function parse(){
    global $data, $ff;
    $pos = strpos($data, chr(13)) + 1;
    $str = substr($data, 0, $pos);
    $data = substr($data, $pos);
    if($pos != 0){
        fputs($ff, $str);
        parse();
    }
}
 
while ($get = fread($f, 4096)) {    
    $data .= $get;
    parse(); //после ее вызова управление не возвращается
}
fclose($f);
fclose($ff);
echo "OK";
 
?>




Спустя 1 час, 53 минуты, 26 секунд (15.12.2006 - 19:46) vasa_c написал(а):
На основании каких тестов было сделано заключение о том, что не возвращается? И куда в таком случае возвращается?
И что вообще делает данный сценарий? И известна ли вам такая возможность, как передача в функцию аргументов?

Опять-таки желательно выложить сюда пример исходного xml-файла, чтобы те, кто захочет помочь могли бы воспроизвести ситуацию у себя.

Спустя 1 час, 1 минута, 21 секунда (15.12.2006 - 20:48) eMASTER написал(а):
Функция не возвращает управление, после своей работы.

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

Можно передавать через аргументы, но суть в том, что разницы нет

XML приводить нет смысла, т.к. данный код его не парсит, а просто сохраняет в файл

Спустя 27 минут, 24 секунды (15.12.2006 - 21:15) vasa_c написал(а):
<b>eMASTER</b>, так куда же девается это управление? Как я понимаю уходит в вечный цикл. Единственная возможная причина pos всегда != 0. <br>
$pos = strpos($data, chr(13)) + 1;

А нулю он может стать равен, только когда strpos вернет -1.

Спустя 2 дня, 14 часов, 7 минут, 31 секунда (18.12.2006 - 11:23) eMASTER написал(а):
<!--QuoteBegin-vasa_c+--><div class='quotetop'>QUOTE(vasa_c)</div><div class='quotemain'><!--QuoteEBegin--><b>eMASTER</b>, так куда же девается это управление? Как я понимаю уходит в вечный цикл. Единственная возможная причина pos всегда != 0. <br>
$pos = strpos($data, chr(13)) + 1;

А нулю он может стать равен, только когда strpos вернет -1.

точно, ты прав, что-то я пока отлаживал ступил блин...
хоть тупая ошибка, все равно спасибо :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.