理解PHP中的一些代码

时间:2011-05-05 08:24:07

标签: php ruby

我是一名正在学习Ruby的noob程序员,我决定编写一个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 个答案:

答案 0 :(得分:1)

只需查看您在帖子顶部指出的代码部分:

  • 第一行是在数组内部的任何内容中用+符号替换任何空格。
  • $ fetch_url使用第一行中更改的字符串构建网址。
  • ob_start激活输出缓冲区,防止将任何内容输出到页面。
  • include_once包含上面构建的URL(如果尚未包含)。
  • $ page = ob_get_contents将输出缓冲区的内容分配给$ page变量。
  • ob_end_clean擦除输出缓冲区。