Понимание некоторого кода в PHP - PullRequest
1 голос
/ 05 мая 2011

Я нубский программист, который изучает Ruby, и я решил написать тестер SERP. Дело в том, что я настолько нуб, что я не знаю, как это сделать, поэтому я нашел в Интернете скрипт, который это делает, но он написан на PHP. Друг помог мне понять первую часть этого, где он нашел много проблем со сценарием. Однако, поскольку мой друг занят, он не может помочь мне «расшифровать» вторую часть сценария.

Я мог писать на Ruby до $ i = 0, и теперь я застрял. Я пытаюсь выяснить, что происходит в остальной части сценария. Есть эти строки, в частности, которые сбивают меня с толку , я думаю, я могу справиться с остальными, , но включил все это (внизу), в случае, если я не даю достаточно информации .

            $keyword_implode = str_replace(' ','+',$keywords[$i]);
        $fetch_url = "http://www.google.com/search?num=50&q=" . $keyword_implode . "&btnG=Search";
        ob_start();
        include_once($fetch_url);
        $page = ob_get_contents();
        ob_end_clean();  

Я искал на php.net некоторую информацию о str_replace, и ни один из примеров действительно не напоминает (мне) ни один из примеров, поэтому я пытаюсь выяснить, что он пытается заменить чем-либо.

Вот весь сценарий:

<?php
    if ($_POST['url'] != '') {
        if (strpos($_POST['keyword'],"\n")) {
            $keywords = str_replace("\n",",",$_POST['keyword']);
            $keywords = explode(",",$keywords);
        } else {
            $keywords[0] = $_POST['keyword'];
        }
        $keyword_input = $_POST['keyword'];
        $url = $_POST['url'];
    }

    $i = 0;

    if ($keywords[$i] != '') {
        while ($keywords[$i] != '') {
            $keyword_implode = str_replace(' ','+',$keywords[$i]);
            $fetch_url = "http://www.google.com/search?num=50&q=" . $keyword_implode . "&btnG=Search";
            ob_start();
            include_once($fetch_url);
            $page = ob_get_contents();
            ob_end_clean();  

            $page = str_replace('<b>','',$page);
            $page = str_replace('</b>','',$page);
            //preg_match('/008000\">(.+)<\/font><nobr>/i', $page, $match);
            preg_match_all('/<font color=#008000>(.*)<\/font>/', $page, $match);
            $r = 0;
            $position = '0';
            while ($match[0][$r] != '') {
                if ($position == '0') {
                    if (strpos($match[0][$r],$url)) {
                        $position = $r+1;
                    } 
                }
                $r++;
            } 
            $google_position = $position;

            $keyword_table .= '
                <tr>
                    <td>' . $keywords[$i] . '</td>
                    <td>' . $google_position . '</td>
                </tr>';
            $i++;
        }
        $keyword_table = '
            <table class="result-table" cellspacing="1">
                <tr>
                    <th>Keyword</th>
                    <th>Google</th>
                </tr>' . $keyword_table . '
            </table>';
    }
?>

Вот что я написал на Ruby:

require 'sinatra'
require 'rspec'
get '/serp_checker' do
  "<form action='/ranked' method='post'>
  <label for='keyword'>Keyword</label>
  <textarea name='keyword' id='keyword' type='text' /></textarea>
  <label for='url'>URL</label>
  <input name='url' id='url' type='text' />
  <input type='submit' value='Go!' />
  </form>"
end

def clean_up_keywords(str)
  str.gsub("\n", ",").delete("\r").split(',')
end

def clean_up_list(arr)
  arr.reject(&:empty?).each(&:lstrip!)
end

post '/ranked' do
  dirty_list = clean_up_keywords(params[:keyword])
  clean_list = clean_up_list(dirty_list)
  return clean_list.to_s
end

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

1 Ответ

1 голос
/ 05 мая 2011

Просто посмотрите на фрагмент кода, который вы указали в верхней части вашего сообщения:

  • Первая строка заменяет любые пробелы символом + во всем, что находится внутри этой части массива..
  • $ fetch_url создает URL-адрес, используя измененную строку из первой строки.
  • ob_start активирует буфер вывода, который предотвращает вывод чего-либо на страницу.
  • include_onceвключает созданный выше URL-адрес (если он еще не включен).
  • $ page = ob_get_contents назначает содержимое буфера вывода переменной $ page.
  • ob_end_clean стирает буфер вывода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...