我正在尝试保存通过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>
根据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);