Сохранить файл с URL, который имеет перенаправление - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь сохранить локальную копию всех носителей, которые отправляются через 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>

1 Ответ

0 голосов
/ 12 ноября 2019

Для решения этой конкретной проблемы рекомендуется использовать libcurl, а не file_get_contents, согласно поддержке Twilio.

Причина этого заключается в том, что Twilio отправляет временный 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);
...