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

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

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

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

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

 $xmlData = file_get_contents('http://user:pass@example.com/file.xml'); 

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

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

 use GuzzleHttp\Client; $client = new Client([ 'base_url' => 'http://example.com', 'defaults' => [ 'auth' => ['user', 'pass'], ]]); $xmlData = $client->get('/file.xml'); 

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. Когда вам просто нужно прочитать файл в переменной, это будет идеальной функцией для использования в качестве замены завитка – следуйте синтаксису URI при создании URL.

 // standard url $content = file_get_contents("http://www.example.com/file.xml"); // or with basic auth $content = file_get_contents("http://user:pass@www.example.com/file.xml"); 

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

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

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

Вы можете использовать curl , чтобы как получить данные, так и идентифицироваться ( как для «базового», так и для «дайджест» ), не требуя расширенных разрешений (например, 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 .

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

Посетите этот файл_get_contents vs cUrl

В основном file_get_contents для вас

 $data = file_get_contents($file_url); 

Если вы используете 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; ?> 

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

Ваш пример можно сделать довольно легко и легко:

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

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

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

 /** * echo HTTP::POST('http://accounts.kbcomp.co', * array( * 'user_name'=>'demo@example.com', * '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; } } 

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

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

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

использовать:

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