Подтвердить что ты не робот

Как использовать wget в php?

У меня есть эти параметры для загрузки XML файла:

wget --http-user=user --http-password=pass http://www.example.com/file.xml

Как я должен использовать это в php для открытия этого XML файла?

4b9b3361

Ответ 1

Если целью является просто загрузить содержимое внутри вашего приложения, вам даже не нужно использовать wget:

$xmlData = file_get_contents('http://user:[email protected]/file.xml');

Обратите внимание, что эта функция не будет работать, если allow_url_fopen отключена (она включена по умолчанию) внутри php.ini или конфигурации веб-сервера (например, httpd. конф).

Если ваш хост явно отключает его или вы пишете библиотеку, рекомендуется использовать cURL или библиотеку, которая абстрагирует функциональные возможности, например Guzzle.

use GuzzleHttp\Client;

$client = new Client([
  'base_url' => 'http://example.com',
  'defaults' => [
    'auth'    => ['user', 'pass'],
]]);

$xmlData = $client->get('/file.xml');

Ответ 2

Wget

wget - это команда linux, а не команда PHP, поэтому для ее запуска вам необходимо использовать exec, который является командой PHP для выполнения команд оболочки.

exec("wget --http-user=[user] --http-password=[pass] http://www.example.com/file.xml");

Это может быть полезно, если вы загружаете большой файл - и хотите отслеживать прогресс, однако при работе со страницами, в которых вас интересует только контент, есть простые функции для этого.

Функция exec включена по умолчанию, но может быть отключена в некоторых ситуациях. Параметры конфигурации для этого находятся в php.ini, чтобы включить, удалить exec из строки конфигурации disabled_functions.

альтернатива

Используя file_get_contents, мы можем получить содержимое указанного URL/URI. Когда вам просто нужно прочитать файл в переменной, это будет идеальной функцией для использования в качестве замены curl - следуйте синтаксису URI когда создавая свой URL.

// standard url
$content = file_get_contents("http://www.example.com/file.xml");

// or with basic auth
$content = file_get_contents("http://user:[email protected]/file.xml");

Как отмечено Sean the Bean - вам также может потребоваться изменить allow_url_fopen на true в вашем php.ini, чтобы разрешить использование URL-адреса в этом методе, однако по умолчанию это должно быть истинно.

Если вы хотите сохранить этот файл локально, существует функция file_put_contents, чтобы записать это в файл в сочетании с предыдущим, это может эмулировать загрузку файла:

file_put_contents("local_file.xml", $content);

Ответ 3

Вы можете использовать curl для получения данных и их определения (для "базового" и "дайджест" auth), не требуя расширенных разрешений (например, exec или allow_url_fopen).

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/file.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
$result = curl_exec($ch);
curl_close($ch);

Затем ваш результат будет сохранен в переменной $result.

Ответ 4

множество методов, доступных в php для чтения файла типа exec, file_get_contents, curl и fopen, но это зависит от вашего требования и разрешения файла

Посетите file_get_contents vs cUrl

В основном файл_get_contents для вас

$data = file_get_contents($file_url);

Ответ 5

Если вы используете Curl в php...

function disguise_curl($url) 
{ 
  $curl = curl_init(); 

  // Setup headers - I used the same headers from Firefox version 2.0.0.6 
  // below was split up because php.net said the line was too long. :/ 
  $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
  $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
  $header[] = "Cache-Control: max-age=0"; 
  $header[] = "Connection: keep-alive"; 
  $header[] = "Keep-Alive: 300"; 
  $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
  $header[] = "Accept-Language: en-us,en;q=0.5"; 
  $header[] = "Pragma: "; // browsers keep this blank. 

  curl_setopt($curl, CURLOPT_URL, $url); 
  curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)'); 
  curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
  curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com'); 
  curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); 
  curl_setopt($curl, CURLOPT_AUTOREFERER, true); 
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($curl, CURLOPT_TIMEOUT, 10); 

  $html = curl_exec($curl); // execute the curl command 
  curl_close($curl); // close the connection 

  return $html; // and finally, return $html 
} 

// uses the function and displays the text off the website 
$text = disguise_curl($url); 
echo $text; 
?> 

Ответ 6

Shellwrap - отличный инструмент для использования командной строки в PHP!

Ваш пример может быть прост и понятен:

use MrRio\ShellWrap as sh;

$xml = (string)sh::curl(['u' => 'user:pass'], 'http://example.com/file.xml');

Ответ 7

Этот метод является только одним классом и не требует импорта других библиотек или повторного использования кода.

Лично я использую этот script, который я сделал некоторое время назад. Здесь здесь, но для тех, кто не хочет нажимать на эту ссылку, вы можете просмотреть ее ниже. Он позволяет разработчику использовать статический метод HTTP::GET($url, $options) для использования метода get в curl, имея возможность передавать пользовательские параметры завивки. Вы также можете использовать HTTP::POST($url, $options), но я вряд ли использую этот метод.

/**
  *  echo HTTP::POST('http://accounts.kbcomp.co',
  *      array(
  *            'user_name'=>'[email protected]',
  *            'user_password'=>'demo1234'
  *      )
  *  );
  *  OR
  *  echo HTTP::GET('http://api.austinkregel.com/colors/E64B3B/1');
  *                  
  */

class HTTP{
   public static function GET($url,Array $options=array()){
    $ch = curl_init();
    if(count($options>0)){
       curl_setopt_array($ch, $options);
       curl_setopt($ch, CURLOPT_URL, $url);
       $json = curl_exec($ch);
       curl_close($ch);
       return $json;
     }
   }
   public static function POST($url, $postfields, $options = null){
       $ch = curl_init();
       $options = array(
          CURLOPT_URL=>$url,
          CURLOPT_RETURNTRANSFER => TRUE,
          CURLOPT_POSTFIELDS => $postfields,
          CURLOPT_HEADER => true
          //CURLOPT_HTTPHEADER, array('Content-Type:application/json')
          ); 
       if(count($options>0)){
           curl_setopt_array($ch, $options);
       }
       $json = curl_exec($ch);
       curl_close($ch);
       return $json;
   }
}

Ответ 8

Я понимаю, что вы хотите открыть xml файл, используя php. Это вызвано для разбора xml файла. Лучше всего здесь.

http://php.net/manual/de/function.xml-parse.php

Ответ 9

<?php
function wget($address,$filename)
{
  file_put_contents($filename,file_get_contents($address));
}
?>

использование:

<?php
wget(URL, FileName);
?>