2013-03-23 80 views
0

我有一个长的网址嵌套在一个变量:$ mp4,并试图用curl下载它,但我得到格式错误。请帮助我,如果可以的话,提前谢谢!PHP curl超长URL格式错误

下面是我在我的PHP脚本:

exec("curl -o $fnctid.mp4 \"$mp4\""); 

错误消息:

curl: (3) <url> malformed 

示例URL来测试下载:

http://f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/PreNCT5/22-TaylorSwift-2426783.mp4 
+1

什么结果命令一下,如果你替换变量是怎样的?例如'回声'

'; echo "curl -o $fnctid.mp4 \"$mp4\""; echo '
';'。另外,你知道PHP提供了对curl的支持,而不必使用exec /命令行:http://www.php.net/manual/en/curl.examples-basic.php – thaJeztah 2013-03-23 16:49:34

+0

它实际上工作,如果我把在他们的网址,但不是当我使用变量,而不是... – thevoipman 2013-03-23 17:18:36

+0

试试这个方法:'exec(“curl -o”。$ fnctid“。”.mp4 \“”。$ mp4。“\ “”);''我怀疑问题在于'.'后面的字符串中的变量 – thaJeztah 2013-03-23 17:21:51

回答

2

目前的网址传回408 - Request Timeout如果是固定的,你是你这个简单的代码:

$url = 'http://f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/PreNCT5/22-TaylorSwift-2426783.mp4'; 
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'; 


$file = __DIR__ . DIRECTORY_SEPARATOR . basename($url); 
$fp = fopen($file, 'w+'); 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 320); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
echo curl_exec($ch); 

var_dump(curl_getinfo($ch)); // return request information 


curl_close($ch); 
fclose($fp); 
+1

这工作完美无瑕!但是,我的旧方法今天也适用,因为我刚刚意识到我在URL中有空格。 – thevoipman 2013-03-26 18:02:47

+0

随时欢迎您:) – Baba 2013-03-26 19:12:59

1

这个错误可以解决通过使用urlencode

$url = urlencode ($url) 

此函数在编码要在URL的查询部分中使用的字符串时很方便,这是传递变量的一种便捷方式。

希望这会解决答案

+0

我试过了,它也没有工作...样本网址:http://f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/PreNCT5/22-TaylorSwift-2426783.mp4 – thevoipman 2013-03-23 19:36:41

+0

嗯,基于该网址的名称,这似乎成为一个'流',而不是一个普通的文件。你可能无法下载! – thaJeztah 2013-03-24 01:01:15

+0

比如果我直接从shell中获取或卷曲它会怎么样它工作得很好? – thevoipman 2013-03-24 03:21:24