• Какую литературу посоветуете по PHP?

    GTRxShock
    @GTRxShock
    В 4 версии если не ошибаюсь добавили трейты, гит, дженкинс, да главы с тестированием перекроили.
    Как справочник по проектированию хороша, да и все паттерны GoF в контексте php с пояснениями как на подбор :)

    если говорить короче - must have!
  • Какую литературу посоветуете по PHP?

    GTRxShock
    @GTRxShock
    Отличная книга, даже в бумажном варианте купил, но для новичка надо что-нибудь попроще.
    А вот как синтаксис, языковые конструкции, работа с куками/сессиями и тд и тп.. будут изучены, тогда смело за эту книгу (к тому моменту должны появиться мысли, как что-либо сделать правильно/лучше, тогда и наступит черед ООП в целом и паттернов в частности)
  • Почему цикл выводит пустой блок?

    GTRxShock
    @GTRxShock
    stackoverflow.com/questions/11854514/is-it-possibl...
    stackoverflow.com/questions/18415142/how-to-handle...

    Только сначала найдите ошибку в своем коде, а потом будете думать о рефакторинге)
  • Почему цикл выводит пустой блок?

    GTRxShock
    @GTRxShock
    https://en.wikipedia.org/wiki/Tree_(data_structure) классическая структура (корень, узел, лист)
    Как вариант дописывать уровень явно, для лучшего восприятия человеком (subanswer -> answerFirstLevel)

    prntscr.com/a7fx8c для начала
  • Как получить данные от vk api через curl?

    GTRxShock
    @GTRxShock
    найдите кусок кода:
    $data = curl_exec($ch);
    list($header, $data) = explode("\n\n", $data, 2);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code == 301 || $http_code == 302)

    и замените
    list($header, $data) = explode("\n\n", $data, 2);
    на
    list($header, $data) = explode("\r\n\r\n", $data, 2);
  • Как получить данные от vk api через curl?

    GTRxShock
    @GTRxShock
    Вы не читаете книги и не смотрите исходный код для начала)

    я напишу набросок, чтобы была видна последовательность - дальше разбирайтесь сами

    <?php

    function curl_redir_exec ($ch) { ... }

    function getPage($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_redir_exec($ch);
    curl_close($ch);
    return $result;
    }

    $res = getPage('https://api.vk.com/method/wall.getById?posts=11718...');
    echo $res;

    удачи в этом нелегком деле, она Вам несомненно пригодится :)
  • Как получить данные от vk api через curl?

    GTRxShock
    @GTRxShock
    вот обычная функция для процедурного стиля:
    function curl_redir_exec($ch)
    {
    static $curl_loops = 0;
    static $curl_max_loops = 20;
    if ($curl_loops++ >= $curl_max_loops)
    {
    $curl_loops = 0;
    return FALSE;
    }
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    list($header, $data) = explode("\n\n", $data, 2);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code == 301 || $http_code == 302)
    {
    $matches = array();
    preg_match('/Location:(.*?)\n/', $header, $matches);
    $url = @parse_url(trim(array_pop($matches)));
    if (!$url)
    {
    //couldn't process the url to redirect to
    $curl_loops = 0;
    return $data;
    }
    $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
    if (!$url['scheme'])
    $url['scheme'] = $last_url['scheme'];
    if (!$url['host'])
    $url['host'] = $last_url['host'];
    if (!$url['path'])
    $url['path'] = $last_url['path'];
    $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
    curl_setopt($ch, CURLOPT_URL, $new_url);
    debug('Redirecting to', $new_url);
    return curl_redir_exec($ch);
    } else {
    $curl_loops=0;
    return $data;
    }
    }

    далее идут настройки curl`a, не забываем про curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

    а вызов $result = curl_exec($ch); меняем на $result = curl_redir_exec($ch);