我写了一些php代码来下载从谷歌Adwords通过邮件发送的xml文件,将数据放入mysql数据库。
其中一个功能是将文件下载到网站空间,但文件大小与文件不同,我通过chrome手动下载(1,8MB对1,6MB)。在视觉上它们之间没有区别。
可以处理已手动下载的文件,但是通过curl下载的文件不能由simplexml处理。
以下是下载功能的代码:
function downloadUrlToFile( $url, $outFileName ) {
if ( is_file( $url ) ) {
copy( $url, $outFileName );
} else {
$options = array(
CURLOPT_FILE => fopen( $outFileName, 'w' ),
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 28800,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array(
'Host hostname',
'User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language en-US,en;q=0.5',
'Accept-Encoding gzip, deflate',
'Connection keep-alive', )
);
$ch = curl_init();
curl_setopt_array( $ch, $options );
curl_exec( $ch );
}
}
编辑:
这里的新代码也不起作用。我在标题中添加了:
。但现在文件是空的(2kb)。
function downloadUrlToFile( $url, $outFileName ) {
if ( is_file( $url ) ) {
copy( $url, $outFileName );
} else {
$options = array(
CURLOPT_FILE => fopen( $outFileName, 'w' ),
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 28800,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => array(
'Host: '.gethostname(),
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Accept-Encoding: gzip, deflate',
'Connection: keep-alive', )
);
$ch = curl_init();
curl_setopt_array( $ch, $options );
curl_exec( $ch );
}
}
答案 0 :(得分:0)
现在可行。
xml文件不一样,虽然我是第一个想到的。
Google在服务器下载时以英语发送xml文件。手动下载时,它们将以浏览器的语言发送。