从具有重定向的URL保存文件

问题描述 投票:1回答:1

我正在尝试保存通过Twilio发送的所有媒体的本地副本。

$media = file_get_contents($mediaUrl);
$filename = $mediaSid . '.' . $fileExtension;
file_put_contents(public_path('storage/mms/' . $filename), $media);

问题是file_get_contents似乎没有遵循重定向,所以我得到了一个包含TwiML的文件。下面有一个我不断得到的例子。我的问题是我需要使用什么功能,以便它遵循重定向并获得媒体而不是XML的实际数据?

创建的文件:

<?xml version='1.0' encoding='UTF-8'?>
<TwilioResponse><Media><Sid/><AccountSid>AC....</AccountSid><ParentSid/><ContentType/><DateCreated>Fri, 08 Nov 2019 01:49:02 +0000</DateCreated><DateUpdated>Fri, 08 Nov 2019 01:49:02 +0000</DateUpdated><Uri>/2010-04-01/Accounts/AC.../Messages/MM.../Media/ME...</Uri></Media></TwilioResponse>
php twilio mms
1个回答
0
投票

根据Twilio支持,建议使用libcurl而不是file_get_contents解决此特定问题。

原因是Twilio发送了一个临时URL,该URL超过1024个字符,将被忽略。

$mediaUrl = "https://api.twilio.com/2010-04-01/Accounts/ACxxxxxxx/Messages/MMxxxxxxxxxxx/Media/MExxxxxxxxxxxxx";

$accountSid = "ACxxxxxxxxxxxxxxx";
$authToken = "...";

$curl = curl_init();
$outfile = fopen('temp.jpg', 'w+');
$options = array(
    CURLOPT_HTTPGET => true,
    CURLOPT_URL => $mediaUrl,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => "$accountSid:$authToken",
    CURLOPT_FILE => $outfile
);
curl_setopt_array($curl, $options);
curl_exec($curl);
curl_close($curl);
© www.soinside.com 2019 - 2024. All rights reserved.