За последние 24 часа нас посетили 22739 программистов и 1273 робота. Сейчас ищут 786 программистов ...

Шальное "echo"

Тема в разделе "PHP для новичков", создана пользователем Babyka, 13 июл 2016.

  1. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Честно сказать не понял как это сделать:(
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Про Delphi подробнее. Прога на Delphi запускает скрипт локально, или через веб-сервер? Если через веб-сервер, логи пишутся на web-сервере, ему по барабану, кто клиент. Если локально, то вообще не понятно, почему нельзя всё взаимодействие с VK сделать через Delphi, нафига тут PHP? Ну и если локально, то там же где-нибудь есть создание процесса для программы (уже не помню, как в delphi это делается), типа
    Код (Text):
    1.  
    2. WinExec(Pchar('php cleversript.php'), ...);
    Вот команду, которую передаёшь в подобную функцию, введи в консоли.

    А если всё через сервер дёргается, то логи должны быть
     
  3. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Прога запускает через веб сервер, который расположен на том же компе что и прога.

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

    Логи же тут хранятся: "usr\local\apache\logs\error.log"?
    там нет никаких сообщений за это время.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Ты запускаешь консольный сценарий, а ждешь логирование ошибок в журнале веб-сервера. Чой-то мне подсказывает что не будет так работать :D

    У каждого процесса операционной системы есть как минимум три дескриптора - стандартный вход, выход, и ошибки. STDIN, STDOUT и STDERR соответственно.
    Когда ты из делфи запускаешь пхп-машину то делфи создает у себя два дополнительных потока для общения с ней - выходные сообщения будут писаться на стандартный вход пхп-машины, а её ответы - будут возвращаться как входящие сообщения в твою дельфю. Тут можно заметить что вывод ошибок пхп-машины уходит в никуда.
    Вариантов два:
    1. направить поток ошибок на стандартный поток вывода. Но тогда ты можешь не различить полезные данные (с STDOUT) от ошибочных (c STDERR).
    Делается это через 2>&1
    2. направить поток ошибок в какой-нибудь файл и потом почитать его.
    Делается это через 2>/path/to/error.log
     
  5. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Если я в скрипте делаю умышленную ошибку, и запускаю его из делфи, то запись о ней отображается usr\local\apache\logs\error.log
    Только что это проверил
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Нот бэд. Тогда давай для начала выкинем делфи и будем как взрослые мальчики запускать пхп-машину сразу из консольки. Когда скрипт будет хорошо работать сам по себе то уже будешь дергать его хоть делфёй хоть батниками.
    Какие данные делфи кидает в пхп-машину?
     
  7. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    id группы, Имя базы данных и имя таблицы в этой базе
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    методом POST?
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Это логи apache, например скрипт может выдать http ошибку 500, её апач запишет, но есть ещё error_log у PHP, там уже ошибки PHP если настроено писать в файл будут отображаться.
     
  10. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    да
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
  12. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Я проверял, что скрипт получает все данные и выводит их.

    Какой то косяк вот здесь может быть?
    $node='{"id": '.$id.', "label": '.proverka(preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name)).', "title": '.$id.', "value": '.$members_count.', "group": 2, x: '.rand( -1500 , 1500 ).', y: '.rand( -1500 , 1500 ).'}';
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Покажи мне как ты делаешь POST-запрос к консольной версии пхп-машины
    Если бы косяк был - ты бы его увидел в журнале ошибок. Ведь как ты сам утверждаешь выше - у тебя туда что-то да пишется. Что странно, ведь это журнал веб-сервера. Может быть ты делаешь POST-запрос к веб-серверу?
     
  14. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Блин, тяжело без знания мат части с кем то говорить)) Я делаю пост запрос к веб серверу.
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Ага, понял этот момент.
    Ну так вот. Давай посмотрим на момент установки злополучной переменной $node.
    Выведи все переменные и все результаты выполнения всех использованных в её объявлении функций (кроме rand).
     
  16. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Похоже косяк в этой строчке:
    preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name)
    если вывести ее в echo то ничего не происходит))
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    почему?
     
  18. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    Не знаю. сейчас написал: echo 'label='.preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name); die;
    и ничего не происходит. не один echo, который до нее не вывел ничего.
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    попробуй var_dump(), он покажет тип переменной и содержание, может там просто пустая строка, ты её не увидишь при выводе через echo.
    Через var_dump() пустая строка будет напечатана так: string(0) ""
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @Ganzal, ТС не запускает cli из Dephi, он поднял локально апач и стучит туда из Delphi. Если бы я это делал, я бы сделал всё на Delphi, поскольку виндовс-приложение может достучаться до API контакта 100%, и для делфей дофига компонентов для доступа в нет, как платных, так и бесплатных. ну ладно.

    @Babyka, давай для начала исключим Delphi, как неизвестную переменную. Для этого просто сотвори html-форму, которая нужные данные будет передавать в твой скрипт по POST. А вообще, поставь PHP IDE и XDebug. Будешь php-скрипт отлаживать как в Delphi, видеть все переменные и т.п. Будет легче
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    @mkramer я уже увидел что делфишный код был твоим :)
     
  22. Babyka

    Babyka Новичок

    С нами с:
    13 июл 2016
    Сообщения:
    26
    Симпатии:
    0
    var_dump тоже ничего не показывает!
     
  23. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    @Babyka возможно программа не доходит до него, подымайся выше. Но лучше не мучатся и провести скрипт через IDE и xdebug
     
  24. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. $node='{"node":['.$node.']}';
    2.         echo $node;


    А что это за такое вообще сооружение?)
    Что ты пытаешься передать в переменную node скажи мне а то я влупить не могу... Прости но я таким извращенством просто не пользуюсь что это?
    ДА у него там код времён php до 5 версии...
    --- Добавлено ---
    PHP:
    1. $node='{"id": '.$id.', "label": '.proverka(preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name)).', "title": '.$id.', "value": '.$members_count.', "group": 2, x: '.rand( -1500 , 1500 ).', y: '.rand( -1500 , 1500 ).'}';
    что это зачем, что ты тут делаешь

    [​IMG]
    --- Добавлено ---
    @denis01 Если бы существовало ИИ которое исполняет задачу по исправлению ошибок в коде, интуитивно подстраивая его под нужное, то программа просто удалила бы этот код и написало его заного. Там Ад в коде, я просто даже вникнуть не могу потому что для меня этот кусок не понятного чего то без комментариев без не чего, ещё и всё сплошником.
    --- Добавлено ---
    уже тут чё то не понятно вообще делается, что это за $i ....

    PHP:
    1. $i=0;
    2.     $id='"'.'gr'.$obj[$i]->id.'"';
    3.     $name=proverka($obj[$i]->name);
    4.  
    5.     $screen_name=proverka($obj[$i]->screen_name);
    6.     $photo_50=proverka($obj[$i]->photo_50);
    7.     if (isset($obj[$i]->city->title)) $city=proverka($obj[$i]->city->title); else $city='null';
    8.     if (isset($obj[$i]->title)) $title=proverka($obj[$i]->title); else $title='null';
    9.     if (isset($obj[$i]->type)) $type=proverka($obj[$i]->type); else $type='null';
    10.     if (isset($obj[$i]->adress)) $adress=proverka($obj[$i]->adress); else $adress='null';
    11.  
    12.     if (isset($obj[$i]->description)) $description=proverka($obj[$i]->description); else $description='null';
    13.     if ($obj[$i]->members_count!==null && $obj[$i]->members_count) $members_count=$obj[$i]->members_count; else $members_count=0;
    14.     if (isset($obj[$i]->status)) $status=proverka($obj[$i]->status); else $status='null';
    15.     if (isset($obj[$i]->contacts)) $count_contacts=count($obj[$i]->contacts); else $count_contacts='null';
    16.     if (isset($obj[$i]->site)) $site=proverka($obj[$i]->site); else $site='null';
    Скажи с какой целью ты $i использовал что по твоему у тебя тут должен делать твой код?

    Циклы сами собой не образуются, у тебя $i всегда равен 0 здесь просто всегда... Если тебе надо было писать 0 мог бы и писать просто 0 потому что заняло бы меньше места и на одну бесполезную строчку меньше.
     
    #49 askanim, 15 июл 2016
    Последнее редактирование: 15 июл 2016
  25. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ты не заметил тут JSON-строку?)
    мож оно для тестов