在函数内部使用时,CURL不起作用

时间:2013-03-28 18:00:28

标签: php curl

我正在尝试使用以下代码执行curl。

mainFunction{
  .
  .
  $url = strtolower($request->get('url', NULL));
  $html_output= $this->startURLCheck($url);
  .
  .
}

function startURLCheck($url)
{
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 $html_output = curl_exec($ch);
}

当我直接给出字符串URL时,这工作正常。但后来我通过函数curl传递字符串数据没有执行。 curl_error也显示没有错误。我为字符串尝试了很多编码和解码方法,结果相同。我做错了什么?我在Windows上使用XAMPP服务器。

我在另一个函数中从HTML帖子请求中获取URL后,将URL传递给此函数。

3 个答案:

答案 0 :(得分:2)

问题是你的函数startURLCheck实际上并不返回要使用的主程序的值。改变最后一行:

function startURLCheck($url)
{
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    return curl_exec($ch);
}

在您的通话代码中,请取出“$ this->”

$html_output = startURLCheck($url);

$ html_output现在包含curl调用的结果。

我假设您从某处复制并粘贴了此代码,因为您的“mainFunction”声明在语法上是不正确的,并且您使用了“$ this->”没有指定startURLCheck是一个对象的方法。

如果实际上你打算将startURLCheck作为对象方法,并且你希望它在对象上设置$ html_output,那么执行以下操作:

<?php

class Example {
    private $html_output;

    function mainFunction()
    { 
        $url='http://www.ebay.com/itm/Apple-iPhone-5-16GB-Black-Slate-Cricket-intl-UNLOCKED-pleeze-read-ad-/251252227033';
        $this->startURLCheck($url);
        echo "HTML output: " . $this->html_output;
    }

    function startURLCheck($url)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $this->html_output = curl_exec($ch);
    }
}

$example = new Example();
$example->mainFunction();

我已在命令行上测试此代码(不在网页中)。如果您将其复制并粘贴到文件中并使用php -r运行它,您将看到结果。 (请注意,我没有包含结束?&gt;标记。当文件只包含PHP代码而没有HTML时,结束标记是可选的。事实上,建议在这种情况下省略结束标记。请参阅{{ 3}})

请在你的问题代码中注明mainFunction,你在URL中的“pleeze”之前有非法空格,并且你在$ url赋值的末尾错过了分号。

希望这会有所帮助。祝你好运。

答案 1 :(得分:1)

这很好用。

<?php
function excURL()
{
 $ch = curl_init();
 $url = "http://www.google.com";
 curl_setopt($ch,CURLOPT_URL,$url);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
 $html_output = curl_exec($ch);
 echo $html_output;
}

excURL();

?>

答案 2 :(得分:1)

嘿伙计们我找到了问题......最后......

当我为curl设置CURLOPT_FOLLOWLOCATION时,这工作正常......

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

但是当我在函数中硬编码URL并且在将url作为变量传递给函数时没有设置CURLOPT_FOLLOWLOCATION时,我不清楚为什么它有效?当我设置此选项时它正在工作两种方式..