Про Delphi подробнее. Прога на Delphi запускает скрипт локально, или через веб-сервер? Если через веб-сервер, логи пишутся на web-сервере, ему по барабану, кто клиент. Если локально, то вообще не понятно, почему нельзя всё взаимодействие с VK сделать через Delphi, нафига тут PHP? Ну и если локально, то там же где-нибудь есть создание процесса для программы (уже не помню, как в delphi это делается), типа Код (Text): WinExec(Pchar('php cleversript.php'), ...); Вот команду, которую передаёшь в подобную функцию, введи в консоли. А если всё через сервер дёргается, то логи должны быть
Прога запускает через веб сервер, который расположен на том же компе что и прога. На делфи - потому что спарсеную информацию потом необходимо фильтровать, редактировать и т.д., так же нужны отчеты, различные табличные представления статистики и т.п. Логи же тут хранятся: "usr\local\apache\logs\error.log"? там нет никаких сообщений за это время.
Ты запускаешь консольный сценарий, а ждешь логирование ошибок в журнале веб-сервера. Чой-то мне подсказывает что не будет так работать У каждого процесса операционной системы есть как минимум три дескриптора - стандартный вход, выход, и ошибки. STDIN, STDOUT и STDERR соответственно. Когда ты из делфи запускаешь пхп-машину то делфи создает у себя два дополнительных потока для общения с ней - выходные сообщения будут писаться на стандартный вход пхп-машины, а её ответы - будут возвращаться как входящие сообщения в твою дельфю. Тут можно заметить что вывод ошибок пхп-машины уходит в никуда. Вариантов два: 1. направить поток ошибок на стандартный поток вывода. Но тогда ты можешь не различить полезные данные (с STDOUT) от ошибочных (c STDERR). Делается это через 2>&1 2. направить поток ошибок в какой-нибудь файл и потом почитать его. Делается это через 2>/path/to/error.log
Если я в скрипте делаю умышленную ошибку, и запускаю его из делфи, то запись о ней отображается usr\local\apache\logs\error.log Только что это проверил
Нот бэд. Тогда давай для начала выкинем делфи и будем как взрослые мальчики запускать пхп-машину сразу из консольки. Когда скрипт будет хорошо работать сам по себе то уже будешь дергать его хоть делфёй хоть батниками. Какие данные делфи кидает в пхп-машину?
Это логи apache, например скрипт может выдать http ошибку 500, её апач запишет, но есть ещё error_log у PHP, там уже ошибки PHP если настроено писать в файл будут отображаться.
Я проверял, что скрипт получает все данные и выводит их. Какой то косяк вот здесь может быть? $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 ).'}';
Покажи мне как ты делаешь POST-запрос к консольной версии пхп-машины Если бы косяк был - ты бы его увидел в журнале ошибок. Ведь как ты сам утверждаешь выше - у тебя туда что-то да пишется. Что странно, ведь это журнал веб-сервера. Может быть ты делаешь POST-запрос к веб-серверу?
Ага, понял этот момент. Ну так вот. Давай посмотрим на момент установки злополучной переменной $node. Выведи все переменные и все результаты выполнения всех использованных в её объявлении функций (кроме rand).
Похоже косяк в этой строчке: preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name) если вывести ее в echo то ничего не происходит))
Не знаю. сейчас написал: echo 'label='.preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $name); die; и ничего не происходит. не один echo, который до нее не вывел ничего.
попробуй var_dump(), он покажет тип переменной и содержание, может там просто пустая строка, ты её не увидишь при выводе через echo. Через var_dump() пустая строка будет напечатана так: string(0) ""
@Ganzal, ТС не запускает cli из Dephi, он поднял локально апач и стучит туда из Delphi. Если бы я это делал, я бы сделал всё на Delphi, поскольку виндовс-приложение может достучаться до API контакта 100%, и для делфей дофига компонентов для доступа в нет, как платных, так и бесплатных. ну ладно. @Babyka, давай для начала исключим Delphi, как неизвестную переменную. Для этого просто сотвори html-форму, которая нужные данные будет передавать в твой скрипт по POST. А вообще, поставь PHP IDE и XDebug. Будешь php-скрипт отлаживать как в Delphi, видеть все переменные и т.п. Будет легче
@Babyka возможно программа не доходит до него, подымайся выше. Но лучше не мучатся и провести скрипт через IDE и xdebug
PHP: $node='{"node":['.$node.']}'; echo $node; А что это за такое вообще сооружение?) Что ты пытаешься передать в переменную node скажи мне а то я влупить не могу... Прости но я таким извращенством просто не пользуюсь что это? ДА у него там код времён php до 5 версии... --- Добавлено --- PHP: $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 ).'}'; что это зачем, что ты тут делаешь --- Добавлено --- @denis01 Если бы существовало ИИ которое исполняет задачу по исправлению ошибок в коде, интуитивно подстраивая его под нужное, то программа просто удалила бы этот код и написало его заного. Там Ад в коде, я просто даже вникнуть не могу потому что для меня этот кусок не понятного чего то без комментариев без не чего, ещё и всё сплошником. --- Добавлено --- уже тут чё то не понятно вообще делается, что это за $i .... PHP: $i=0; $id='"'.'gr'.$obj[$i]->id.'"'; $name=proverka($obj[$i]->name); $screen_name=proverka($obj[$i]->screen_name); $photo_50=proverka($obj[$i]->photo_50); if (isset($obj[$i]->city->title)) $city=proverka($obj[$i]->city->title); else $city='null'; if (isset($obj[$i]->title)) $title=proverka($obj[$i]->title); else $title='null'; if (isset($obj[$i]->type)) $type=proverka($obj[$i]->type); else $type='null'; if (isset($obj[$i]->adress)) $adress=proverka($obj[$i]->adress); else $adress='null'; if (isset($obj[$i]->description)) $description=proverka($obj[$i]->description); else $description='null'; if ($obj[$i]->members_count!==null && $obj[$i]->members_count) $members_count=$obj[$i]->members_count; else $members_count=0; if (isset($obj[$i]->status)) $status=proverka($obj[$i]->status); else $status='null'; if (isset($obj[$i]->contacts)) $count_contacts=count($obj[$i]->contacts); else $count_contacts='null'; if (isset($obj[$i]->site)) $site=proverka($obj[$i]->site); else $site='null'; Скажи с какой целью ты $i использовал что по твоему у тебя тут должен делать твой код? Циклы сами собой не образуются, у тебя $i всегда равен 0 здесь просто всегда... Если тебе надо было писать 0 мог бы и писать просто 0 потому что заняло бы меньше места и на одну бесполезную строчку меньше.