使用CURL进行PHP下载

时间:2011-08-10 16:54:48

标签: php curl download

我有一个让我发疯的问题。

我正在尝试通过从外部源发送给我的参数从远程服务器下载文件,并将其保存到我服务器上的特定目录中。

以下是代码:

// value of this variable is something like http://api.com/20110720-202122_dceb89c3-a468-4de8-a37f-4f594bc5aab8.mp3

$recordingURL = $_REQUEST['RecordingURL'];

$filename = basename($recordingURL);

$path = '../mp3/TT/'.$filename;
if(!file_exists($path))
{    
if (!mkdir($path,'0755', true)) 
    {   
    errorLog('handlemp3.php','0','could not make recording directory'); 
    }
}

$fp = fopen($path, 'w');
$ch = curl_init($recordingURL);
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);

起初我看到“TT”目录没有被创建,我意识到问题是我没有将mkdir中的递归属性设置为true。一旦我这样做,我就看到了在服务器上创建的TT目录。奇怪的是,现在我没有看到在服务器上创建的MP#。

任何人都知道为什么?我做了一个“$ error = error_get_last()”没有它,看到我得到一个错误,如“指令\'register_long_arrays \'在PHP 5.3及更高版本中被弃用”但我不知道是什么可以抛出该错误。

有人可以帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个:

file_put_contents('/path/to/local/file', file_get_contents('http://site.com/remote/file'));

答案 1 :(得分:0)

我不确定这是对的:

curl_setopt($ch, CURLOPT_FILE, $fp);

如果我错了,请纠正我,但我认为您上传了$fp的内容,而不是将$ch的内容下载到$fp

删除以下行:

$fp = fopen($path, 'w');
curl_setopt($ch, CURLOPT_FILE, $fp);
fclose($fp);

并将其放在最后(所以curl_close下方):

file_put_contents($path, $data);

答案 2 :(得分:0)

就像白痴一样,这就是我做错了:1)作为字符串传递权限而不是整数2)在mkdir中包含文件名,因此文件名在文件夹中但设置为目录3)在fopen中没有包含文件名