Php curl_exec成功,但输出文件为空
我编写了下面的PHP函数来下载文件,它可以正常工作。 但是,当我尝试下载此文件时:Php curl_exec成功,但输出文件为空,php,curl,download,Php,Curl,Download,我编写了下面的PHP函数来下载文件,它可以正常工作。 但是,当我尝试下载此文件时: $url = 'http://javadl.sun.com/webapps/download/GetFile/1.7.0_02-b13/windows-i586/jre-7u2-windows-i586-iftw.exe'; download($url); 。。。没有内容写入文件。我不知道为什么。创建文件后,对curl_exec的调用返回true,但输出文件仍然为空。该文件可以在浏览器中正常下载,并且该功能可以
$url = 'http://javadl.sun.com/webapps/download/GetFile/1.7.0_02-b13/windows-i586/jre-7u2-windows-i586-iftw.exe';
download($url);
。。。没有内容写入文件。我不知道为什么。创建文件后,对curl_exec的调用返回true,但输出文件仍然为空。该文件可以在浏览器中正常下载,并且该功能可以成功下载其他文件。我遇到的问题就是这个文件(主机?)
感谢您的帮助
function download($url)
{
$outdir = 'C:/web/www/download/';
// open file for writing in binary mode
if (!file_exists($outdir)) {
if (!mkdir($outdir)) {
echo "Could not create download directory: $outdir.\n";
return false;
}
}
$outfile = $outdir . basename($url);
$fp = fopen($outfile, 'wb');
if ($fp == false) {
echo "Could not open file: $outfile.\n";
return false;
}
// create a new cURL resource
$ch = curl_init();
// The URL to fetch
curl_setopt($ch, CURLOPT_URL, $url);
// The file that the transfer should be written to
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, false);
$header = array(
'Connection: keep-alive',
'User-Agent: Mozilla/5.0',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// downloading...
$downloaded = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
fclose($fp);
if (!$downloaded) {
echo "Download failed: $error\n";
return false;
} else {
echo "File successfully downloaded\n";
return $outfile;
}
}
该url重定向到另一个url。您需要将CURLOPT_FOLLOWLOCATION设置为1,才能正常工作。尝试添加 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); //then after curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($curl, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); //然后在curl_setopt($ch,CURLOPT_FILE,$fp)之后; curl_setopt($curl,CURLOPT_BINARYTRANSFER,true);
检查一些示例:如果您尝试对$download变量进行vardump和/或删除CURLOPT_文件,会发生什么情况,您是否看到CURL上正常出现的任何内容?以及(CURLOPT_BINARYTRANSFER,1)对于exe(或者在我的情况下是excel)文件:-)不确定这是否适用于所有人,但这对我来说是Windows的问题。Mac/Unix同事无法复制它。