3

次のコードを使用して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 を渡しています。

4

3 に答える 3

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」宣言が構文的に正しくなく、startURLCheck がオブジェクトのメソッドであることを指定せずに「$this->」を使用したため、このコードをどこかからコピーして貼り付けたと想定しています。

実際に 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();

このコードをコマンド ラインでテストしました (Web ページではありません)。これをコピーしてファイルに貼り付け、php -r を使用して実行すると、結果が表示されます。(そして、閉じ ?> タグを含めていないことに注意してください。ファイルに PHP コードのみが含まれ、HTML が含まれていない場合、閉じタグはオプションです。実際、そのような場合は閉じタグを省略することをお勧めします。http:/を参照してください。 /php.net/manual/en/language.basic-syntax.instruction-separation.php )

また、mainFunction の質問コードで、URL の「pleeze」の前に不正なスペースがあり、$url 割り当ての末尾にセミコロンがないことに注意してください。

お役に立てれば。幸運を。

于 2013-03-29T05:41:41.583 に答える
1

Hey Guys私は問題を見つけました..最後に..

カールに CURLOPT_FOLLOWLOCATION を設定すると、これは正常に機能しています...

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

しかし、CURLOPT_FOLLOWLOCATIONを設定せずに、関数内にURLをハードコードしたときに機能し、URLを変数として関数に渡したときに機能しなかった理由は明らかではありません...このオプションを設定すると、両方の方法で機能します。 .

于 2013-03-29T06:31:17.963 に答える
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();

?>
于 2013-03-28T18:23:47.933 に答える