Не присоединяется символ.

Тема в разделе "PHP", создана пользователем dump1111, 13 мар 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Вот фрагмент кода:
    PHP:
    if ($pos-$pos_backup<=495 and $pos!=strlen($content))
    $insert_strings=$insert_strings.$check_string;
    . Когда $pos=998, а $pos_backup=979, $check_string перестаёт присоединяться к $insert_strings, хотя когда $pos меньше 990-х всё работает нормально. Кто-нибудь знает в чём дело?
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    <telepate_mode on> Наверное, потому что не выполняется условие $pos != strlen($content) <telepate_mode off>
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    561
    Когда в условиях что-то не так работает, то лучше вывести на экран данные каторые в нём сравниваются и визуально проследить что не так
    PHP:
    if ($pos-$pos_backup<=495 and $pos!=strlen($content)) 
    $insert_strings=$insert_strings.$check_string
    else
    exit(
    'if error- '.($pos-$pos_backup).'<=495 and '.$pos.'!='.strlen($content));
     
  4. Unkn0wn404

    Unkn0wn404 Писатель

    Регистр.:
    12 июн 2008
    Сообщения:
    6
    Симпатии:
    1
    Если $pos равно 990, то естественно что длинна $content не равна 990, потому и не выполняется.
     
  5. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Да, пожалуй нужно привести полный код. Ту строку, в которой проблема я отметил камментарием:
    PHP:
    <?php
    error_reporting
    (E_ALL & ~E_NOTICE);
    //chdir ('C:/content');
    create_main_page('C:/content');
    function 
    create_main_page($dir)
    {
    //chdir ('C:/content');
    //$pos-$pos_backup!=496 or $pos!=strlen($content)
    $files glob("C:/content/*");
    foreach (
    $files as $file)
    {
    if (
    $file == "." || $file == "..") continue;
    elseif (!
    is_dir($file))
    {
    $content=file_get_contents($file);
    }
    }
    $previos_pos=-1;
    $pos_backup=0;
    $pos=0;
    $insert_strings=' '.'<p>';
    $true=true;
    While (
    $pos!=strlen($content))
    {
    While (
    $true)
    {
    While(
    $content[$pos]!=' ' and $pos!=strlen($content))
    {
    $insert_strings=$insert_strings.$content[$pos];
    $pos++;
    }
    $previos_pos=$pos;
    $check_string='';
    $pointer=0;
    While(
    $pointer!=and $pos!=strlen($content) )
    {
    $check_string=$check_string.$content[$pos];
    $pos++;
    if (
    $content[$pos]!=' '$pointer=1;
    elseif (
    $pointer==1$pointer=2;
    }

    // Вот в этом месте присоединения символа не происходит
    if ($pos-$pos_backup<=495 and $pos!=strlen($content))
    $insert_strings=$insert_strings.$check_string;


    else
    {
    $pos_backup=$previos_pos;
    $pos=$previos_pos;
    break;
    }
    }
    $insert_strings.='<br>'."\r\n".' ';
    //$i++;
    $check=strlen($content);
    }
    //$count=strlen("\r\n");//strlen($insert_strings);
    $insert_strings=substr($insert_strings,0,strlen($insert_strings)-7).'</p>'."\r\n";//' '.'</p>'."\r\n";
    $main_page=<<< MAIN_PAGE
    <?xml version="1.0" encoding="windows-1251"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>
    $title</title>
    <link rel="stylesheet" type="text/css" href="screenstyle.css" media="screen" />
    </head>
    <body>
    <div class="wholepage">
    <div id="header">
    <div class="mainheader">
    <h2>
    $title</h2>
    </div>
    </div>
    <div id="sidecontainer">
    <ul class="nav">
    $side_links_2uv
    </ul>
    </div>
    <div id="content">
    <h1>
    $title</h1>
    $insert_strings
    </div>
    <div id="footer">
    <div class="mainfooter">
    <p>
    $title</p>
    </div>
    </div>
    </div>
    </body>
    </html>
    MAIN_PAGE;
    file_put_contents('C:/Satelite/'.$title,$main_page);
    }
    /*
    <li><a href="http://wm-kull.narod.ru/">Главная</a></li>
    <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
    <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
    <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
    */
    ?>
    Нет, длина $content больше 2500. Все значения я проверил в Eclipse.
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Как значения $pos, $pos_backup,$pos, $content вообще попадают в функцию create_main_page()? :eek:
     
  7. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Я просто неправильно код сюда вставил. Хз, обрамляю тегами
    PHP:
    , а только часть кода выводится, поэтому выведу простым кодом.
    Код:
    <?php
    error_reporting(E_ALL & ~E_NOTICE);
    //chdir ('C:/content');
    create_main_page('C:/content');
    function create_main_page($dir)
     {
        //chdir ('C:/content');
        //$pos-$pos_backup!=496 or $pos!=strlen($content)
     	$files = glob("C:/content/*");
        foreach ($files as $file)
            {
            if ($file == "." || $file == "..") continue;
            elseif (!is_dir($file))
              {
              $content=file_get_contents($file);
              }
            }
         $previos_pos=-1;
         $pos_backup=0;
         $pos=0;
         $insert_strings='     '.'<p>';
         $true=true;
         While ($pos!=strlen($content)) 
         {    
         	While ($true)
         	{
         	While($content[$pos]!=' ' and $pos!=strlen($content))
            {
            	$insert_strings=$insert_strings.$content[$pos];
            	$pos++;
            }
            $previos_pos=$pos;
            $check_string='';
            $pointer=0;
            While($pointer!=2 and $pos!=strlen($content) )
            {
            	$check_string=$check_string.$content[$pos];
            	$pos++;
            	if ($content[$pos]!=' ') $pointer=1;
            	elseif ($pointer==1) $pointer=2;
            }
            //Вот в этом месте ошибка
            if ($pos-$pos_backup<=495 and $pos!=strlen($content))
            $insert_strings=$insert_strings.$check_string;
            else 
            {
            $pos_backup=$previos_pos;
            $pos=$previos_pos;
            break;
            }
         	}
            $insert_strings.='<br>'."\r\n".'     ';
         	//$i++;
         	$check=strlen($content);
         }
            //$count=strlen("\r\n");//strlen($insert_strings);
            $insert_strings=substr($insert_strings,0,strlen($insert_strings)-7).'</p>'."\r\n";//'     '.'</p>'."\r\n";
            $main_page=<<< MAIN_PAGE
    <?xml version="1.0" encoding="windows-1251"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>$title</title>
    <link rel="stylesheet" type="text/css" href="screenstyle.css" media="screen" />
    </head>
    <body>
    <div class="wholepage">
      <div id="header">
        <div class="mainheader">
          <h2>$title</h2> 
        </div>
      </div>
      <div id="sidecontainer">
        <ul class="nav">
    $side_links_2uv      
        </ul>
      </div>
      <div id="content">
        <h1>$title</h1>
    $insert_strings
      </div>
      <div id="footer">
        <div class="mainfooter">
          <p>$title</p>
        </div>
      </div>
    </div>
    </body>
    </html>
    MAIN_PAGE;
    file_put_contents('C:/Satelite/'.$title,$main_page);
    }
    /*
    <li><a href="http://wm-kull.narod.ru/">Главная</a></li>
          <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
          <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
          <li><a href="http://wm-kull.narod.ru">Ссылка</a></li>
     */
    ?>


    ---------- Post added at 15:41 ---------- Previous post was at 14:01 ----------

    Кстати символы перестают присоединяться, тогда когда размер переменной $insert_strings превышает 1024 байта.

    Добавлено через 39 минут
    Кстати, я заметил, что если переменная $insert_strings более 1024 байт, то к ней не присоединяются символы. Вот для примера код:
    Код:
    <?php
    $content= <<< CONTENT
    . . . And Basil?  From a psychological point of view,how interesting he was!  The new manner in art, the freshmode of looking at life, suggested so strangely by the merelyvisible presence of one who was unconscious of it all;the silent spirit that dwelt in dim woodland, and walked unseenin open field, suddenly showing herself, Dryadlike and not afraid,because in his soul who sought for her there had been wakenedthat wonderful vision to which alone are wonderful things revealed;the mere shapes and patterns of things becoming, as it were,refined, and gaining a kind of symbolical value, as thoughthey were themselves patterns of some other and more perfectform whose shadow they made real:  how strange it all was!He remembered something like it in history.  Was it not Plato,that artist in thought, who had first analyzed it?Was it not Buonarotti who had carved it in the coloured marblesof a sonnetsequence? But in our own century it was strange.. . . Yes; he would try to be to Dorian Gray what, without knowing itfgs
    CONTENT;
    $newcontent='fgssssssssssssssssssssssssssss';
    $content=$content.$newcontent;
    ?>
    
    строка $newcontent не прибавляется полностью к строке $content. Это, что так и должно быть? И как это можно изменить?
     
  8. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Вероятно это какие-то боки php, может быть криво собран или еще что-то, попробуй установить другую версию php. :)

    P.S: какая ОС и какая версия php?
     
  9. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Win XP SP3, PHP 5.2.10
     
Статус темы:
Закрыта.