2013-03-28 7 views
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을 전달합니다.

+0

$ url이 scope : http://php.net/manual/en/language.variables.scope.php al 그래서'curl_error()'는 컬 호출에서 잘못되는 것에 대한 더 많은 정보를 줄 것입니다. –

+0

함수 정의에 사용하는 구문을 추가 할 수 있습니까? – Stu

+0

runCurl ($ url) {...과 (와)과 같은 기능이 있는지 확인하십시오.} 그리고 코드에서 runCurl ('http : // foo/bar'); – chrislondon

답변

1

안녕 얘들 아 내가 problem..Finally ..

나는 이것이 잘 작동 컬을위한 CURLOPT_FOLLOWLOCATION을 설정

...

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

을 발견하지만이 일을하는 이유는 명확하지 않다 STIL있다 함수 내에서 URL을 하드 코드하고 CURLOPT_FOLLOWLOCATION을 설정하지 않고 URL을 함수로 변수로 전달할 때 작동하지 않습니다 ...이 옵션을 설정하면 두 방법으로 모두 작동합니다 ..

+1

다행 찾았습니다. 함수 내에서 하드 코드 된 URL과 관련하여 도움을 받으려면 관련된 코드를 더 많이 포함해야한다고 생각합니다. 가장 좋은 방법은 stackoverflow에있는 다른 사람들이 스스로 실행하고 테스트 할 수있는 자체 포함 된 테스트 케이스를 작성하는 것입니다. 정확한 코드 일 필요는 없습니다. 오류를 재현하는 예입니다. – David

+0

나를 위해 작동하지 않습니다. –

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(); 

?> 
+0

네, 저도 작동합니다. 그렇지만 변수를 통해 URL을 함수로 전달합니다. –

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 이제 컬 호출의 결과를 포함 꺼내 : 마지막 줄을 변경합니다.

"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(); 

나는 명령 행에서이 코드를 테스트 (안에있다 웹 페이지). 이 파일을 복사하여 파일에 붙여 넣고 php -r을 사용하여 실행하면 결과가 표시됩니다. (닫는?> 태그는 포함하지 않았다는 것에주의하십시오. 파일에 PHP 코드와 HTML 만 포함되어있는 경우 닫는 태그는 선택 사항입니다. 실제로는 닫는 태그를 생략하는 것이 좋습니다. http://php.net/manual/en/language.basic-syntax.instruction-separation.php 참조

또한 mainFunction에 대한 질문 코드에서 URL에 "pleeze"가 들어가기 전에 불법 공백이 있고 $ url 지정이 끝나면 세미콜론이 누락되었습니다.

희망이 도움이됩니다. 행운을 빕니다.

+0

이제는 print_r을 사용하여 $ html_output을 인쇄 할 때 "잠시 기다리십시오 ... 리디렉션 중입니다"및 url .. 그러나 html 페이지 내용을 인쇄하는 URL을 하드 코드하면 ... 미안합니다. 불완전한 코드에 대한 .. 내가 뭘 내 기능의 일부도있다. 나중에 정규 표현식을 사용하여 다른 출력을 반환 html_output을 분석하고있어. –

관련 문제