[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    echo min(array(5, 2, 5,10,59,78));
     
  2. Feksess

    Feksess New Member

    Joined:
    23 Jul 2009
    Messages:
    57
    Likes Received:
    3
    Reputations:
    -1
    Когда вводятся данные в форму нужно, чтобы они сохранялись в файле, а не просто выводились, как с использованием echo. Как это сделать?
     
  3. FewG

    FewG Member

    Joined:
    25 Dec 2009
    Messages:
    136
    Likes Received:
    12
    Reputations:
    0
    PHP:
    $forminput $_POST['field1'];
    $handle fopen 'logs.txt''a' );
    fwrite $handle$forminput);
    fclose $handle );
    Как-то так.
     
  4. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,414
    Likes Received:
    911
    Reputations:
    863
    когда работаешь со множеством переменных:
    $forminput = $_POST['field1'].":".$_POST['field2'].":".$_POST['field3'];
     
    _________________________
  5. Feksess

    Feksess New Member

    Joined:
    23 Jul 2009
    Messages:
    57
    Likes Received:
    3
    Reputations:
    -1
    FewG, спасибо. Но текст сохраняется в конце файла и на странице выводится где попало.
    Можно как-то сохранить в определенное место файла, или что-то еще сделать, чтобы этот текст выводился на странице в нужной мне области?
     
  6. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    php.net/manual/ru/function.fseek.php
     
  7. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как при чтении файла (fread) узнать расположение указателя чтения (т.е. сколько уже прочитали) и как передвинуть этот указатель (не используя "чтение вне куда", иногда требуется передвинуть его назад)?
     
  8. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    ftell() / fseek()
     
  9. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Задача: удалить из файла (скрипта) все многострочные комментарии. Без использования функций explode, substr (анализировать по-символьно).
    PHP:
    <?
    $c file_get_contents('script.php');
    for (
    $i=0;strlen($c);$i++)
       {
         if (
    $c[$i] !== '/*') {$sc.=$c[$i];}
         else {
    $i strpos($c,'*/',$i)+1;}
       }
    file_put_contents('new_sc',$sc);
    ?>
    Зацикливается.
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI 1) $c[$i] !== '/*' - символ не может быть равен двум символам, такие дела

    2) Условие останова цикла фор - проверка длины строки. Длина строки - тут неуменьшаяющаяся величина и в булево False не превратится - цикл никогда не остановится

    С чем связано желание "анализировать посимвольно"?
     
    _________________________
    #18670 Gifts, 12 Jun 2011
    Last edited: 12 Jun 2011
    1 person likes this.
  11. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    PHP:
    <?
    $c=file_get_contents('jc.php');
    for (
    $i=0;$i<=strlen($c);$i++)
       {
         if ((
    $c[$i] !== '/') && ($c[$i+1] !== '*')) {$jc.=$c[$i];}
         else {
    $i=strpos($c,'*/',$i)+1;}
       
       }

    file_put_contents('new_jc',$jc);
    ?>
    Спасибо, теперь работает.
    так более алгоритмично что-ли.
    разве не быстрее, чем комбинировать строковые функции?
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI вы используете strpos для нахождения конца комментария, но не хотите использовать для начала. Использование substr+strpos было бы быстрее цикла пхп.

    Это, конечно, если на секунду забыть о том, что для разбора кода ни ваш вариант, ни регулярки, ни строковые функции не подходят.

    Проверять лень, но ваш код хоть и запускается, но скорее всего все равно не работает. Придумайте программу для разбора вот этого теста:
    PHP:
    <?PHP
    /*
    some comment
    echo '/*';
    bad bad code
    */
    echo '/*';
    phpinfo();
    echo 
    "*/";
     
    _________________________
    #18672 Gifts, 12 Jun 2011
    Last edited: 12 Jun 2011
  13. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    уже убедился в этом :)
    php_strip_whitespace() справляется, ничего не затирает и не пропускает.
    Как вариант можно парсить при помощи token_get_all() и token_name(), потом удалять T_Comment и обратно переводить в код. Никак иначе.
     
    2 people like this.
  14. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как из строки удалить 5, 10, 15, 20 символы?
     
  15. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    Имеются строки:
    12312412412_hello_world_v1.2
    12341241212__world_v1.2
    12312_hello_world_v1.4

    Как вырезать цыфры из начала строки?
     
  16. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Code:
    $Строка = "12312412412_hello_world_v1.2";
    echo substr($Строка, strpos($Строка, "_")+1);
     
    1 person likes this.
  17. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    НTL, используй str_split для того, чтобы превратить строку в массив символов.
    Потом через unset удаляешь нужный номер символа (элемент массива).
    И через implode собираешь назад в строку.
     
  18. chexec

    chexec Member

    Joined:
    19 Nov 2010
    Messages:
    67
    Likes Received:
    11
    Reputations:
    3
    Wakko
    PHP:
    echo preg_replace('/\d+_(.*?)/''\\1''12312412412_hello_world_v1.2');
     
    #18678 chexec, 13 Jun 2011
    Last edited: 13 Jun 2011
  19. OSW

    OSW Elder - Старейшина

    Joined:
    12 Jul 2007
    Messages:
    325
    Likes Received:
    56
    Reputations:
    7
    есть задача: есть сайт на вордпрессе, в папке uploads есть папка, в которой создаются подпапки. Имя подпапки берется из custom fields. Далее - скрипт смотрит в папку, находит все изображения и выводит их на странице.

    Вот код:

    Code:
     $photoalbum = get_post_meta($post->ID, 'photoalbum', true);  
    if ($photoalbum) {
    function get_images($directory)   {   
    $filenames = array();   
    $directory = str_replace('\\', '/', $directory);   
    if(is_dir($directory))   { 
    $dp = opendir($directory);   
    while($filename = readdir($dp))   {   
    if(!is_dir($directory.'/'.$filename))   
    {   
    $file_ext = strtolower(substr($directory.'/'.$filename, strrpos
    ($directory.'/'.$filename, '.')+1));
    if(in_array($file_ext, array('jpg', 'gif', 'png', 'jpeg')))   {   
    $filenames[count($filenames)] = $filename;   }   }   }   }   
    $dp = closedir();   
    return $filenames;   
    }     
    $path = '/wp-content/uploads/zvezdi/'.$photoalbum.'/';   $img_count = 100; 
    $images = get_images ($_SERVER["DOCUMENT_ROOT"].$path);
    $i = 0;   
    while($images[$i])   {   
    $npic = count($images);  
    $star = '<img src="'.htmlspecialchars($path.$images[$npic]).'" border="0" alt="">';  
    echo '<a href="'.htmlspecialchars($path.$images[$npic]).'" 
    rel="lightbox">'.'<img class="foto_gal_star" src="/wp-
    content/themes/wg/timthumb.php?src='.htmlspecialchars($path.
    $images[$npic]).'&h=100&w=100&zc=1&q=100"'.'" border="0" 
    width="150px">'.'</a>';   
    unset($images[$npic]);   
    $images = array_values($images);   
    $i++;   
    if($i==$img_count) break;   }   }   
    else   {   } 
    вся эта конструкция нифига не хочет выводить картинки, вместо них - пустые окошки по числу картинок в папке.
    но если я вместо

    Code:
    $npic = count($images);
    вставляю

    Code:
     $npic = rand(1, count($images)-1);
    то все работает. Но мне нужно выводить все картинки, а не случайное число. Что делать и как быть?
     
    #18679 OSW, 13 Jun 2011
    Last edited: 13 Jun 2011
  20. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    chexec, какое отношение ваше сообщение имеет к моему посту?

    http://forum.antichat.ru/showpost.php?p=2712978&postcount=18851
     
Thread Status:
Not open for further replies.