2013-03-23 66 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