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

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

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

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    да, он вечный, потому $text за каждую итерацию увеличивается на символ, продлевая цикл :)
    тут всё проще, разве что надо задаться условием переноса/разделения слов, символы будут распологаться по решетке (по клеткам) или по порядку в зависимости от длины символов. Т.е. рисовать по букве или вставлять сразу блок текста, попутно меряя его высоту.
    по сабжу посмотри функцию imagettfbbox
     
    #15981 roxblnfk, 29 Jul 2010
    Last edited: 29 Jul 2010
  2. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Ещё момент. А как определить ещё когда нужно напечатать слово, место, допустим, для 4 букв ещё есть на строке, а слово следующее из 6 букв. Как понять, что нужно перенести?

    В общем нужно тупо вставить текст на картинку с фиксированной шириной. Неужели нет готовой функции, по-моему это распространённая задача.
     
    #15982 programming, 29 Jul 2010
    Last edited: 29 Jul 2010
  3. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    ах почему же в GD нет функции imagecaptcha(), которая отргенерирует готовую капчу ;) задача то распространённая как бы
     
  4. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    Короче идея была такая чтобы в нужном месте вставить переносы и рассчитать высоту.
     
  5. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    php.net/wordwrap
     
    2 people like this.
  6. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    В общем имею код
    PHP:
    // подключение к чату
    $ch2 curl_init('http://'.$hostname.'/srv/chat/chat_proc?lChannel=15&xml=1');
    // берем куки из файла
     
    curl_setopt($ch2CURLOPT_COOKIEFILE"cookie.txt");
    // выполняем запрос
    curl_exec ($ch2);
    //закрываем
    curl_close ($ch2);
    В итоге надо из страницы которая открывается после запроса вытащить нужные мне данные.
    Подскажите как это сделать?
    Знаю что функцией preg_match но как именно не знаю т.к. тока начала работать с cURL.
     
  7. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    ну да,сначала надо выучить синтаксис регулярок
     
  8. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    С праздником коллеги!

    Как организовать вывод массовых кодов на залитые изображения?? Спрашивал 5-ью днями ранее, поэтому приведу ссылки, более чем уверен, что реализуется это проще чем кажется, понять бы только как = (

    https://forum.antichat.ru/showpost.php?p=2266619&postcount=16162
    https://forum.antichat.ru/showpost.php?p=2266630&postcount=16163
    https://forum.antichat.ru/showpost.php?p=2266849&postcount=16166

    Спасибо вам большое, работает! Но только для массовых ссылок. Не считает $i теперь, точнее выводит ссылки для заполненных инпутов (картинок), а вот загружает так только одну:
    PHP:
    $alllink = array();
    $alltlink = array();
    $alldlink = array();
    $fcount count($_FILES['userfile']['tmp_name']) or $fcount count($_POST['linkfile']);

    for (
    $i=0$i<$fcount$i++) {

    $image $_FILES['userfile']['tmp_name'][$i] or $image $_POST['linkfile'][$i];

    $alllink[] = 'ilink';
    $alltlink[] = 'tlink';
    $alldlink[] = 'dlink';

    }

    if (
    $fcount>1) {
        echo 
    implode(" "$alllink);
        echo 
    implode("<br />\r\n"$alltlink);
        echo 
    implode("<br />\r\n"$alldlink);
    }
    Ай забыл, надо еще $_POST['linkfile'] как то подсчитать. Там таже лабудень, выводит 10* ссылок, хотя загружаю только 3 фотки = (

    * - в формочке 10 инпутов для загрузки по файлам, и 10 инпутов - по ссылке.
     
    #15988 Axel G, 30 Jul 2010
    Last edited: 30 Jul 2010
  9. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Я вроде спрашивала не про синтаксис...
    С синтаксисом как нить сама разберусь.
     
  10. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    установите опцию CURLOPT_RETURNTRANSFER на 1 и делайте запрос вот так:
    PHP:
    $result curl_exec($ch);
    и парсите $result
     
  11. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Axel G php это, к сожалению, не питон и такая строчка
    PHP:
    $fcount count($_FILES['userfile']['tmp_name']) or $fcount count($_POST['linkfile']);  
    Не имеет права на существование, так как будет возвращать неожидаемый результат. По большому счету стоит проверять на пустоту все записи с помощью цикла http://php.net/foreach и http://php.net/empty. А если требуется искусственно ограничить количество пришедших записей, то сделать обычный цикл на N записей
     
    _________________________
    1 person likes this.
  12. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Code:
    $fcount = count($_FILES['userfile']['tmp_name']) or $fcount = count($_POST['linkfile']);
    Любопытно, что такая конструкция работает как ожидается в php и не работает в питоне.
    Code:
    php -r '$a = 1 or $a = 2; print($a . "\n");'
    1
    php -r '$a = 0 or $a = 2; print($a . "\n");'
    2
    Code:
    python -c 'a = 1 or a = 2; print(a)'
      File "<string>", line 1
    SyntaxError: can't assign to operator
    
    python -c '(a = 1) or (a = 2); print(a)'
      File "<string>", line 1
        (a = 1) or (a = 2); print(a)
           ^
    SyntaxError: invalid syntax
    
     
    #15992 astrologer, 30 Jul 2010
    Last edited: 30 Jul 2010
  13. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    astrologer да, пожалуй, здесь не прав. Мной имелась ввиду конструкция:
    PHP:
    $a 0;
    $b 5;
    $c $a or $b
    echo 
    $c."\n";
    и
    Code:
    a = 0
    b = 5
    c = a or b
    print c
    В первом случае я ожидал бы 5, ну хотя бы 1 (или True), а получаю то что получаю
     
    _________________________
  14. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    С php всё понятно - он унаследовал ещё от перла набор логических операторов - буквенные (and, or, xor) обладают более низким приоритетом, чем присваивание. В php это менее полезно. Такая строчка:
    Code:
    $c = $a || $b;
    присвоит $с истину.

    С питоном тоже всё понятно - "or" обладает большим приоритетом, чем присваивание. А вот что присваивание не является выражением меня удивляет.

    Dense is often more readable.

    // Gifts: еще бы возвращал этот ваш ПХП последнее значение, а не только результат логической операции.
    Присваивание не является выражением - это конечно спорный момент в питоне, но лучше уж так, чем позним вечером искать ошибку типа if ($a = 2), а если еще "Dense is often more readable." задействован, то можно вешаться. На этом закончим оффтоп, пожалуй


    Обсуждаем приоритеты операторов - самые что ни на есть вопросы новичков, никакого оффтопа - строго по теме.

    Если бы. Вообще-то как язык php во многом отстает. Тут в какой-то теме приводили аргумент в защиту php вроде "это логические операторы, поэтому должно быть логическое значение"

    Если компактная запись убирает ненужную тавтологию (которая иногда преподносится как более читаемый код), вешаться не придётся.
    Code:
    $isSecure = validate();
    if ($isSecure)
    {
      $results = compute();
      print $results;
    }
    Code:
    if (validate())
    {
      print compute();
    }
    Code:
    print compute() if validate();
     
    #15994 astrologer, 30 Jul 2010
    Last edited: 30 Jul 2010
    1 person likes this.
  15. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Gifts, хмм,
    Нее, как раз требуется подсчитать кол-во заполненных инпутов, говоря простым языком. Форич до этого не юзал, обходился фором, бум пробовать.

    astrologer, а можно с этого момента поподробнее, насчет приоритетов. || !== or ??

    И что лучше использовать буквенное или символьное, для 'и' использую && - привык уже, а вот этот символ ||, на клаве найти трудновато, хз есть ли он, а постоянное в пуск лазеть не айс, потому юзаю or.
     
  16. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    http://php.net/operators.precedence

    Выбирать в зависимости от того, какой нужен приоритет.
     
  17. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Это то, что нужно.
    Только теперь другая как-бы проблема.
    Получился вот такой код:
    PHP:
    <?php
    $text 
    "I have a page with an image floating on the right, and text printed out beside the image (to the left). I used wordwrap  to wrap the text so that it doesn't go over the image, but sometimes the text would go down beyond the image (vertically beyond the image, where the height of the text was more than the height of the image), resulting in wrapped text that doesn't need to be wrapped. So I came up with this method that takes a number max-lines to wordwrap, and then the rest either no wrapping, or wordwrapping at a different number of characters:";
    $text=wordwrap($text100"\r\n"true);
    $width 500;
    $col=explode("\n"$text);
    $n=count($col)+1;
    $im=imagecreate($width$n*13); 
    $background_color imagecolorallocate($im255255255); 
    $text_color imagecolorallocate($im2331491);
    imagettftext($im701015$text_color'arial.ttf'$text);
    imagepng($im're.png');
    ?>
    Всё отлично работает. Но есть маленькая проблема, как я понимаю, с wordwrap. С аглийскими буквами - 100 - это действительно 100 символов, а вот когда я загоняю русский текст - получаю переносы, через каждые 50 символов. Можно это как-нибудь поправить?
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    programming перевести текст в 8 битную кодировку (например windows-1251), разбить, и вернуть обратно UTF-8. http://php.net/iconv
     
    _________________________
    1 person likes this.
  19. Andres

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

    Joined:
    4 Apr 2008
    Messages:
    320
    Likes Received:
    119
    Reputations:
    0
    Как можно удалить последнее поле из таблицы, если результат ложь

    if (...){
    ...
    }
    else{
    DELETE самое последнее поле из таблицы
    }
    думал может так
    DELETE MAX(id) FROM table

    но не катит(
    и то, я же говорю ему удалить макс ид а не всё поле
     
    #15999 Andres, 30 Jul 2010
    Last edited: 30 Jul 2010
  20. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    примени ту штуку max(id), сохрани в переменную, а потом сделай DELETE * from `table` WHERE id= $maxid
     
    1 person likes this.
Thread Status:
Not open for further replies.