#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;