调用方法会产生不同的结果

时间:2015-09-02 20:06:51

标签: php

我想从第三方页面收集一些数据。我为此使用了http://simplehtmldom.sourceforge.net/。在构造中,我从页面中获取选择项目,然后将其传递给loopSelect($html),后者循环选项(某些产品类别),然后在新参数(产品类别)中对其进行POST调用。页。服务器返回一个字符串(子类别的选择框)。

问题:

var_dump($select);返回空字符串。如果我删除行$type = $this->getBetween...它按预期工作,我可以看到每个产品类别的每个子类别的选择字符串。

/**
 * 
 * @param array $search
 * @return string
 */
function getSelect(array $search = [])
{        
    $default = [
        'option' => 'com_batteryfinder',
        'format' => 'raw',
        'controller' => 'batteryfinder',
        'task' => 'getdropdown',
    ];

    $data = array_merge($default, $search);
    var_dump($data);
    // use key 'http' even if you send the request to https://...
    $options = array(
        'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data),
        ),
    );
    $context  = stream_context_create($options);
    return file_get_contents($this->url, false, $context);               
}


function loopSelect($html)
{
    $name = $html->find('select',0)->getAttribute ( 'name' );
    foreach($html->find('option') as $option)
    {
        if ($option->value)
        {
            $this->formData[$name] = $option->value;

            $select = $this->getSelect($this->formData);

            var_dump($select);

            $type = $this->getBetween($select, "loadSearchSelect(options, '", "');");

        }
    }         
}

看起来调用方法getBetween会弄乱一切。

function getBetween($out, $start, $end)
{
    if (strpos($out, $start) === false)
    {
        return FALSE;
    }        
    $startsAt = strpos($out, $start) + strlen($start);


    $endsAt = strpos($out, $end, $startsAt);
    if ($endsAt=== FALSE)
    {
        return FALSE;
    }
    return substr($out, $startsAt, $endsAt - $startsAt);        
}

修改

$select传递给新变量似乎可以解决问题,但我不知道为什么会这样做?

        $this->formData[$name] = $option->value;

        $select = $this->getSelect($this->formData);

        var_dump($select);

        $out = $select;

        $type = $this->getBetween($out, "loadSearchSelect(options, '", "');");
        var_dump($type);

1 个答案:

答案 0 :(得分:0)

很抱歉,如果我过于明显,但是,您是否有显示错误处于活动状态?可能getBetween导致一些未显示的错误并完成脚本的执行?或者var_dump显示'字符串(0)""'或者像,并且脚本完成了。

无论如何,为什么你不使用正则表达式来实现getBetween函数?