как скачивать файлы по ссылкам? - PullRequest
0 голосов
/ 06 февраля 2012

Я ищу ссылки с сайта с этим кодом.

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://example.com");
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);

// search the results from the starting site
if( $result ){
   preg_match_all('/<a href="(http:\/\/www.[^0-9]+.pdf?)"/', $result, $output, PREG_SET_ORDER );
     foreach($output as $item  ){ 
        print_r($item );
      }
}
copy($item, 'file.pdf');
?>

только одна PDF-ссылка, которая читается. тогда мне нужен код для загрузки PDF-файлов, которые предоставляют ссылки в php. функция копирования не работает. спасибо:)

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Я решил, используя этот код, спасибо за @Oldskool :):

<?php
set_time_limit(0);
include 'simple_html_dom.php';
$url='example.com';
//set your save path here
$path = '/home/igos/pdfs/';

$html = file_get_html($url) or die ('invalid url');
foreach($html->find('a') as $e) {
     $link= $e->href;
     if (preg_match('/\.pdf$/i', $link)) {
          $result[] = $link;
          copy($link, $path . basename($link));
     }
}

?>
1 голос
/ 06 февраля 2012

Здесь есть две проблемы:

  1. Вы печатаете только внутри цикла foreach, ничего не сохраняя.
  2. Вы используете функцию copy() со статическим именем файла file.pdf.

Возможно, вы захотите сохранить все файлы в цикле foreach с одинаковым именем или с произвольным именем (в противном случае каждая операция сохранения перезаписывает предыдущий file.pdf), что-тонапример:

// Set your save path here
$path = '/home/igos/pdfs/';

foreach($output as $item){ 
    copy($item, $path . basename($item));
  }

Это сохранит все файлы, сохраняя их исходное имя файла в папке /home/igos/pdfs/.

...