찾다
백엔드 개발PHP 튜토리얼PHP의 컬, fsocket, file_get_content 함수 비교

최근 웹 도둑 프로그램을 작업할 때 file_get_content가 더 이상 요구 사항을 충족할 수 없다는 것을 발견했습니다. 원격 콘텐츠를 읽을 때 file_get_content가 컬보다 사용하기 편리한 점만 빼면 컬만큼 좋지는 않은 것 같아요

원격 콘텐츠를 캡쳐하기 위해 예전부터 file_get_content 함수를 사용해왔는데 사실 컬이라는 좋은 기능이 있다는 건 알고 있었는데, 살펴보니 사용법이 꽤 복잡하다는 걸 느꼈습니다. file_get_content만큼 간단하지 않으며 요구 사항도 크지 않으므로 컬 사용 방법을 배울 필요가 없습니다.

PHP에서 컬과 file_get_content 간의 일부 비교 주요 차이점: Curl은 FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 및 LDAP를 포함한 많은 프로토콜을 지원합니다. 즉, file_get_content가 할 수 없는 많은 일을 할 수 있습니다. Curl은 PHP에서 콘텐츠를 원격으로 획득하고 수집할 수 있으며, PHP 웹 버전의 FTP 업로드 및 다운로드를 구현하고, 인터페이스 도킹(API)을 구현하고, 시뮬레이션된 쿠키를 구현합니다. 기능은 매우 강력합니다. 컬의 몇 가지 기본 사용법을 이해한 후에는 설정 매개변수 중 일부를 기억하는 것이 조금 어렵지만 일반적으로 사용되는 몇 가지 매개변수만 기억하면 됩니다. 컬을 켜십시오: PHP는 기본적으로 컬 기능을 지원하지 않기 때문에 컬을 사용하려면 먼저 php.ini에서 이 기능을 활성화해야 합니다. 즉, ;extension= php_curl.dll 앞에 있는 세미콜론을 제거한 다음 저장하고 다시 시작해야 합니다. 아파치/iis . 기본 구문:

  1. $my_curl = cur_init(); //curl 객체 초기화
  2. curl_setopt($my_curl, CURLOPT_URL, "http://bbs.it- home.org"); //크롤링에 필요한 URL 설정
  3. curl_setopt($my_curl,CURLOPT_RETURNTRANSFER,1); //결과를 문자열로 저장할지 화면에 출력할지 설정합니다. 1은 저장을 의미합니다. 결과. 문자열로
  4. $str =curl_exec($curl); //요청 실행
  5. echo $str; //가져온 결과 출력
  6. curl_close($curl);
코드 복사

최근에 다른 사람의 웹사이트에서 음악 데이터를 가져와야 합니다. file_get_contents 함수를 사용했지만 항상 가져오지 못하는 문제가 발생했습니다. 매뉴얼의 예제에 따라 시간 초과를 설정했지만 대부분 작동하지 않습니다.

  1. $config['context'] = stream_context_create(array('http' => array('method' => "GET",
  2. 'timeout' => 5//이 시간 제한은 불안정하고 작동하지 않는 경우가 많습니다
  3. )
  4. ));
코드 복사

가끔 서버의 연결 풀을 살펴보면 비슷한 오류가 많이 발견되어 큰 골칫거리가 됩니다. file_get_contents(http://***): 스트림을 열지 못했습니다… 이제 대신 컬 라이브러리를 사용하고 함수 대체를 작성합니다.

  1. 함수 컬_파일_get_contents($durl){
  2. $ch = 컬_init();
  3. curl_setopt($ch, CURLOPT_URL, $durl);
  4. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  5. curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
  6. curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
  7. curl_setopt($ch, CURLOPT_RETURNT RANSF 응급실, 1 ) ;
  8. $r = curl_exec($ch);
  9. curl_close($ch);
  10. return $r;
  11. }
코드 복사

그래서 실제 네트워크 문제 외에는 더 이상 문제가 없습니다. 다음은 컬 및 file_get_contents에 대해 다른 사람들이 수행한 테스트입니다. file_get_contents가 google.com을 크롤링하는 데 걸리는 시간(초): 2.31319094 2.30374217 2.21512604 3.30553889 2.30124092 컬 사용 시간: 0.68719101 0.64675593 0.64326 0.81983113 0.63956594 큰 차이가 있나요? 하하, 제 경험상 이 두 도구는 속도뿐 아니라 안정성에서도 다릅니다. 네트워크 데이터 캡처의 안정성에 대한 요구 사항이 높은 친구는 위의 cur_file_get_contents 기능을 사용하는 것이 좋습니다. 안정적이고 빠를 뿐만 아니라 브라우저를 위조하여 대상 주소를 스푸핑할 수도 있습니다!

curl 및 file_get_contents의 사용법에 대해서는 이전 기사에서 많이 언급한 바 있습니다. 참고할 만한 몇 가지 좋은 기사는 다음과 같습니다.

  • PHP file_get_contents 시간 초과 처리 설정 방법
  • 잘못된 Gzip 웹페이지를 잡아내는 php file_get_contents에 대한 솔루션
  • PHP의 file_get_contents 시간 초과 문제에 대한 해결 방법
  • PHP file_get_contents 시간 초과 설정 방법
  • php file_get_content 호환성 감지 예시
  • 페이지 정보를 캡처하는 php file_get_contents 코드
  • 페이지 정보를 캡처하는 php file_get_contents 함수 코드

방법 1: file_get_contents를 사용하여 가져오기 모드에서 콘텐츠 가져오기

  1. $url='http://www.domain.com/';
  2. $html = file_get_contents($ url);
  3. echo $html;
  4. ?>
코드 복사

방법 2: fopen으로 URL을 열고 get 메소드로 콘텐츠 가져오기

  1. $fp = fopen($url, 'r');
  2. stream_get_meta_data($fp);
  3. while(!feof($fp)) {
  4. $result .= fgets($fp, 1024);
  5. }
  6. echo "url body: $result";
  7. fclose($fp);
  8. ?>
코드 복사

방법 3: 포스트 모드에서 file_get_contents 함수를 사용하여 URL 가져오기

  1. $data = array('foo' => 'bar');
  2. $data = http_build_query($ data);
  3. $opts = array (
  4. 'http' => array (
  5. 'method' => 'POST',
  6. 'header'=> "콘텐츠 유형: 애플리케이션 /x-www-form-urlencodedrn" .
  7. "콘텐츠 길이: " . strlen($data) . "rn",
  8. 'content' => $data
  9. )
  10. );
  11. $context = stream_context_create($opts);
  12. $html = file_get_contents('http://localhost/e/admin/test.html', false, $context);
  13. echo $html;
  14. ?>
코드 복사

방법 4: fsockopen 함수로 URL을 열고 get 모드에서 헤더 및 몸

  1. 함수 get_url($url,$cookie=false)
  2. {
  3. $url=parse_url($url );
  4. $query = $url[path]."?".$url[query];
  5. echo "Query:".$query;
  6. $fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
  7. if (!$fp) {
  8. return false;
  9. } else {
  10. $request = "GET $query HTTP/1.1rn";
  11. $request .= "호스트: $url[host]rn";
  12. $request .= "연결: 닫기";
  13. if($cookie) $request.="쿠키: $cookien";
  14. $request.="rn";
  15. fwrite($fp,$request);
  16. while()) {
  17. $result .= @ fgets($fp, 1024);
  18. }
  19. fclose($fp);
  20. return $result;
  21. }
  22. }
  23. //URL의 html 부분을 가져오고 제거 헤더
  24. 함수 GetUrlHTML($url,$cookie=false)
  25. {
  26. $rowdata = get_url($url,$cookie);
  27. if($rowdata)
  28. {
  29. $body= stristr($rowdata,"rnrn");
  30. $body=substr($body,4,strlen($body));
  31. return $body;
  32. }
  33. return false;
  34. }
  35. ?>
코드 복사

방법 5: fsockopen 함수로 URL을 열고 POST에서 전체 데이터 가져오기 헤더와 본문을 포함한 모드

  1. 기능 HTTP_Post($URL,$data,$cookie, $referrer="")
  2. {
  3. // 주어진 URL 구문 분석
  4. $URL_Info=parse_url($URL);
  5. // 리퍼러 구축
  6. if($referrer=="") // 제공되지 않은 경우 이 스크립트를 리퍼러로 사용
  7. $referrer="111″;
  8. // $data에서 문자열 만들기
  9. foreach($data as $key=>$value)
  10. $values[]="$key=".urlencode($ value);
  11. $data_string=implode("&",$values);
  12. // 어떤 포트가 필요한지 확인 – 제공되지 않은 경우 표준(=80)을 사용
  13. if(!isset($URL_Info) ["port"]))
  14. $URL_Info["port"]=80;
  15. // POST 요청 작성:
  16. $request.="POST ".$URL_Info["path"]." HTTP/1.1n";
  17. $request.="호스트: ".$URL_Info["host"]."n";
  18. $request.="참조자: $referern";
  19. $request. ="콘텐츠 유형: application/x-www-form-urlencodedn";
  20. $request.="콘텐츠 길이: ".strlen($data_string)."n";
  21. $request.="연결 : closen";
  22. $request.="쿠키: $cookien";
  23. $request.="n";
  24. $request.=$data_string."n";
  25. $fp = fsockopen ($URL_Info["host"],$URL_Info["port"]);
  26. fputs($fp, $request);
  27. while(!feof($fp)) {
  28. $result .= fgets($fp, 1024);
  29. }
  30. fclose($fp);
  31. return $result;
  32. }
  33. ?>
코드 복사

방법 6: 컬 라이브러리 사용 컬 라이브러리를 사용하기 전에 php.ini에서 컬 확장 기능이 켜져 있는지 확인해야 할 수도 있습니다.

  1. $ch = 컬_init();
  2. $timeout = 5;
  3. curl_setopt($ch, CURLOPT_URL, 'http://www.domain.com/');
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  6. $file_contents = cur_exec($ ch);
  7. curl_close($ch);
  8. echo $file_contents;
  9. ?>
코드 복사

PHP의 세 가지 기능인 컬, fsockopen 및 file_get_contents는 모두 시뮬레이션된 음성 수집을 실현할 수 있습니다. 셋의 차이점이나 주의할 점이 있나요? 자오용빈: 가끔 file_get_contents()를 사용하여 외부 파일을 호출할 때 시간 초과로 인한 오류를 보고하기 쉬운 경우가 있습니다. 그냥 컬로 바꾸세요. 구체적인 이유는 명확하지 않습니다. Curl은 file_get_contents() 및 fsockopen()보다 더 효율적입니다. CURL이 자동으로 DNS 정보를 캐시하기 때문입니다(하이라이트를 테스트해야 함)

판지아펑: file_get_contents 컬 fsockopen 일반화 없이 현재 요청된 환경에서 선택적 작업: 우리 회사에서 개발한 KBI 애플리케이션을 살펴보겠습니다. 방금 사용을 시작했습니다: file_get_contents 나중에 채택됨: fsockopen 지금까지 마지막으로 사용한 것: 컬 (원격으로) 개인적인 이해는 이렇습니다.(틀리면 지적해 주시고, 틀리면 추가해주세요) file_get_contents는 php.ini에서 Allow_url_fopen을 활성화해야 합니다. http를 요청할 때 http_fopen_wrapper가 사용됩니다. keeplive.curl을 모르더라도 괜찮습니다. file_get_contents()는 단일 실행 효율성이 높고 헤더 없이 정보를 반환합니다. 일반 파일을 읽을 때는 문제가 되지 않지만, 원격 파일을 읽을 때는 문제가 발생합니다. 지속적인 연결을 설정하려면 여러 페이지를 여러 번 요청하세요. 그러면 file_get_contents 및 fopen에 문제가 발생합니다. 획득한 내용이 정확하지 않을 수도 있습니다. 그래서 유사한 수집 작업을 할 때 분명히 문제가 있을 것입니다. 양말은 상대적으로 수준이 낮고 구성이 번거롭고 작동이 어렵습니다. 완전한 정보를 반환합니다.

판샤오닝-텐센트: file_get_contents는 특정 URL의 내용을 가져올 수 있지만 게시할 수는 없습니다. Curl은 게시하고 얻을 수 있습니다. 헤드 정보도 얻을 수 있습니다 소켓은 낮은 수준입니다. UDP 또는 TCP 프로토콜을 기반으로 상호 작용하도록 설정 가능 file_get_contents와 컬이 이를 수행할 수 있다면 소켓이 이를 수행할 수 있습니다. 소켓이 할 수 있는 일을 컬은 할 수 없을 수도 있습니다. file_get_contents는 데이터를 가져오는 경우가 더 많습니다. 더 효율적이고 간단합니다. Zhao의 상황도 겪었고 CURL을 통해 호스트를 설정했는데 괜찮았습니다. 이는 네트워크 환경과 관련이 있습니다.

이상입니다. 위 내용은 PHP에서 url, fsocket, file_get_content 함수 사용의 유사점과 차이점을 예제를 통해 소개한 것입니다.



성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP 로깅 : PHP 로그 분석을위한 모범 사례PHP 로깅 : PHP 로그 분석을위한 모범 사례Mar 10, 2025 pm 02:32 PM

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Laravel의 플래시 세션 데이터로 작업합니다Laravel의 플래시 세션 데이터로 작업합니다Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel 테스트에서 단순화 된 HTTP 응답 조롱Laravel 테스트에서 단순화 된 HTTP 응답 조롱Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

PHP에서 늦은 정적 결합의 개념을 설명하십시오.PHP에서 늦은 정적 결합의 개념을 설명하십시오.Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법.프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법.Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경