2013-05-01 3 views
0

URL에서 XML VAST를 다운로드하고 PHP의 XML 파일에 로컬로 저장하려고합니다. 그 때문에 나는 file_get_contents와 file_put_contents를 사용하고 있습니다. 이것은 내가 사용하고있는 스크립트입니다 :PHP file_get_contents 및 VAST xml

<?php 
$tid=time(); 

$xml1 = file_get_contents('http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256'); 
file_put_contents("downloads/file1_$tid.xml", $xml1); 
echo "<p>file 1 recorded</p>"; 
?> 

URL은 xml VAST 코드를 전달할 실제 URL입니다.

<?xml version="1.0" encoding="UTF-8"?> <VAST version="2.0"> </VAST> 

하지만 파이어 폭스에서 실행하면 실제로 일부 코드를 제공합니다 :의

<VAST version="2.0"><Ad id="Adify"><Wrapper><AdSystem>Eyeblaster</AdSystem><VASTAdTagURI>http://bs.serving-sys.com/BurstingPipe/adServer.bs?cn=is&c=23&pl=VAST&pli=6583370&PluID=0&pos=7070&ord=4288438534]&cim=1</VASTAdTagURI><Impression>http://ad.afy11.net/ad?ipc=NMUsqYdyBUCjh4-i2HwWfK1oILM2AAAAN6-rBkSy8JNMZcuzAlj1XlSySpo6Hi7xEYULS+UgOVN5D3UuhFUVSWbFHoLE-+3su0-QnGgZgMJyiTm-R6O+yQ==</Impression><Creatives/></Wrapper></Ad></VAST> 

아니 100 % 내 문제는 내가 파일 드 저장할 때 빈 VAST 태그를 쓸 것입니다 시간, 그들은 요청의 양을 모자를 쓰지 만, 더 자주 나는 PHP 스크립트를 사용하여 파일을 저장하려고하면.

PHP 스크립트를 브라우저를 모방하는 방법입니까? 이게 옳은 질문인지는 모르겠지만, 내가 PHP 스크립트를 사용할 때 비어있는 VAST 태그를 얻고 브라우저를 사용할 때 전체 태그를 얻는 이유는 내가 생각할 수있는 유일한 것입니다.

어떤 아이디어 ???

감사합니다 :)

업데이트 : 몇 가지 추가 연구를하고 후에, 나는 stream_context_create 기능에 대한 몇 가지 정보를 발견,하지만 난 브라우저의 결과를 복제 할 수 없었다.

<?php 

$tid=time(); 

$opts = array('http' => 
    array(
     'method' => 'GET', 
     //'user_agent ' => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6", 
     'header' => array(
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8 
' 
     ), 
    ) 
); 
$context = stream_context_create($opts); 


$xml1 = file_get_contents('http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256'); 
file_put_contents("downloads/file1_$tid.xml", $xml1); 
echo "<p>file 1 recorded</p>"; 
echo "<textarea rows='6' cols='80'> $xml1 </textarea> "; 
echo "<br><iframe src='http://ad.afy11.net/ad?enc=4&asId=1000009566807&sf=0&ct=256' width='960' height='300'></iframe>"; 
?> 

내가 또한 브라우저에서 바로 파일을지고와 PHP 함수가 없을 때 때 비교하는 iframe이를를 CH3OH :

여기 내 새로운 코드입니다.

+0

지원 옵션은이 서비스 공급 업체에 문의하십시오. – hakre

+0

그것은 공급 업체에 관한 것이 아니라, 파이어 폭스와 다르게 file_get_contents가 어떤 일을하는지 알아내는 것입니다. – pcapelo

+0

글쎄, 그것은 말하기 쉽습니다 : 전부 다. 모든면에서이 기능은 파이어 폭스와 완전히 다릅니다. 브라우저에서이 URL을 열어도 file_get_contents가 얻는 것이기 때문에 아무 것도 없습니다. 따라서 첫 번째 수준의 지원을 위해 해당 웹 서비스 공급 업체에 문의하여 요청 수행 방법, 변경 사항 등을 파악할 수 있습니다. – hakre

답변

3

일부 연구를 마친 후 문제점에 대한 해결책을 찾았으며 향후 참조 할 수 있도록 여기에서 공유하고 싶습니다. file_get_contents와 함께 일부 HTTP 헤더를 전달하는 아이디어. 나는 이것을 다음과 같이 수행합니다 :

$opts = array(
      'http'=>array(
         'method'=>"GET", 
         'header'=>array("Accept-language: en", "Content-Type: multipart/form-data\r\n"), 
         'user_agent'=> $_SERVER['HTTP_USER_AGENT'] 
         ) 
      ); 

$context = stream_context_create($opts); 

$xml4 = file_get_contents($url1, true, $context); 

이제 브라우저를 사용하는 것과 같은 결과를 얻을 수 있습니다.

+0

3 년 후 같은 질문이 생겼을 때 정말 대단한가요? –