сохранение неизвестных файлов с помощью curl w / PHP 5.3.x

#php #file #curl

#php #файл #curl

Вопрос:

Я пытаюсь заархивировать веб-базовый форум, содержащий вложения, опубликованные пользователями. До сих пор я использовал библиотеку php cURL для получения отдельных разделов и смог сохранить необработанные страницы. Однако теперь мне нужно найти способ архивировать вложения, которые находятся на сайте.

Вот проблема: поскольку тип файла не согласован, мне нужно найти способ сохранить файлы с правильным расширением. Обратите внимание, что я планирую переименовать файл при его сохранении, чтобы он был организован таким образом, чтобы его можно было легко найти позже.

Ссылка на прикрепленные файлы на странице приведена в формате:

 <a href="https://example.com/get_file?fileId=4342343212223">some file.txt</a>
  

Я уже использовал preg_match(), чтобы получить URL-адреса прикрепленных файлов. Моя самая большая проблема сейчас заключается в том, чтобы просто убедиться, что извлеченный файл сохранен в правильном формате.

Мой вопрос: Есть ли какой-либо способ эффективно определить тип файла? Я бы предпочел не использовать регулярное выражение, но я не вижу другого способа.

Ответ №1:

Добавляет ли сервер правильное поле заголовка Content-Type при обслуживании файлов? Затем вы можете перехватить это, установив CURLOPT_HEADER или file_get_contents $http_response_header .

http://www.php.net/manual/en/reserved.variables.httpresponseheader.php

Ответ №2:

я бы посмотрел на

http://www.php.net/manual/en/book .fileinfo.php

чтобы посмотреть, сможете ли вы автоматически определять тип файла, когда он попадет вам в руки.

Ответ №3:

вы можете использовать DOMDocument и DOMXPath для безопасного извлечения URL-адресов и имени файла.

 $doc=new DOMDocument();
$doc->loadHTML($content);
$xpath= new DOMXpath($doc);
//query examples:
foreach($xpath->query('//a') as $node)
    echo $node->nodeValue;
foreach($xpath->query('//a/@href') as $node)
    echo $node->nodeValue;