php*_*eby 2 php curl http download
谁能告诉我为什么此CURL代码仅在我的本地服务器上起作用而不在实时服务器上起作用?在3种不同的主机上尝试过,没有任何效果。
实时检查所有内容1)启用了卷曲2)PHP版本尚可3)执行卷曲没有任何错误但没有结果
已经三天了,我找不到任何解决方案,请帮助。
error_reporting(1);
set_time_limit(1500);
$fname=time().'_myfile.flv';
header('Content-type: video/x-flv');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$fname\"");
define('USERAGENT', "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");
$url='http://v3.lscache5.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=914010%2C907605&algorithm=throttle-factor&itag=34&ip=112.0.0.0&burst=40&sver=3&signature=D51A660BDF83B54B3584425DBE8930D5D0F805E1.B3FB21D0CAF625D36A17B558A0A653F20788B49F&expire=1313503200&key=yt1&ipbits=8&factor=1.25&id=1cacd26a9913e4ec';
$ch = curl_init() or die("Error");
curl_setopt($ch, CURLOPT_USERAGENT, USERAGENT);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
if(curl_exec($ch) === FALSE)
{
die("Curl failed: " . curl_error($ch)); // Never goes here
}
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
?>
我有这个问题好几天了,无法在PHP中找到任何错误,并且cURL响应似乎完全返回了null。最后找到建议的代码放入cURL请求中
if (curl_exec($curl) === FALSE) {
die("Curl Failed: " . curl_error($curl));
} else {
return curl_exec($curl);
}
Run Code Online (Sandbox Code Playgroud)
最后添加这个给了我一个PHP错误:
卷曲失败:SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
在SO上搜索该错误给了我这个:HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA正常
这导致我将代码添加到我的cURL请求中,从而实质上禁用了SSL验证。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Run Code Online (Sandbox Code Playgroud)
我不使用服务器管理员来寻找更好的解决方案,因为我不知道这种解决方法是否很好,但是目前可以正常使用。