web-dev-qa-db-ja.com

PHPでwgetを使用するには?

XMLファイルをダウンロードするには、次のパラメーターがあります。

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

このxmlファイルを開くには、phpでそれをどのように使用する必要がありますか?

31

目的がアプリケーション内のコンテンツを単にロードすることである場合は、wgetを使用する必要さえありません。

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

この関数は allow_url_fopen は、php.iniまたはWebサーバー設定(httpd.confなど)内で無効になっています(デフォルトで有効になっています)。

ホストが明示的に無効にしている場合、またはライブラリを作成している場合は、 cURL または Guzzle などの機能を抽象化するライブラリを使用することをお勧めします。

use GuzzleHttp\Client;

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

$xmlData = $client->get('/file.xml');
32
Ja͢ck

wget

wget は、PHPコマンドではなく、Linuxコマンドです。これを実行するには、 exec 、これは、シェルコマンドを実行するためのPHPコマンドです。

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

これは大きなファイルをダウンロードする場合に役立ちます-進行状況を監視したいのですが、コンテンツに興味があるだけのページで作業するとき、それを行うための簡単な関数があります。

exec関数はデフォルトで有効になっていますが、状況によっては無効になる場合があります。これの構成オプションはphp.iniにあり、disabled_functions構成文字列からexecを有効にして削除します。

alternative

file_get_contents を使用して、指定されたURL/URIのコンテンツを取得できます。ファイルを変数に読み込むだけの場合、これはcurlの代わりとして使用するのに最適な関数です。URLを作成するときは、 URI構文 に従ってください。

// 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 php.iniのtrueを使用して、このメソッドでURLを使用できるようにしますが、デフォルトではtrueになっているはずです。

そのファイルをローカルに保存したい場合、ファイルに書き込むための関数 file_put_contents があります。これは前のものと組み合わせて、ファイルのダウンロードをエミュレートできます:

file_put_contents("local_file.xml", $content);
46
Matt Clark

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変数に保存されます。

10
Adam

exec、file_get_contents、curl、fopenなどのファイルを読み込むためにphpで使用できる多くのメソッドが、要件とファイル許可に依存します

これをご覧ください file_get_contents vs cUrl

基本的にはあなたのためにfile_get_contents

$data = file_get_contents($file_url);
1
Navneet Garg

PHPでCurlを使用している場合...

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; 
?> 
1
Ravi Chauhan

このメソッドは1つのクラスにすぎず、他のライブラリのインポートやコードの再利用は必要ありません。

個人的には、少し前に作成したこのスクリプトを使用しています。 here にありますが、そのリンクをクリックしたくない場合は、下に表示できます。開発者は、静的メソッドHTTP::GET($url, $options)を使用してcurlで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;
   }
}
1
Austin Kregel

Shellwrap は、PHPでコマンドラインを使用するための素晴らしいツールです!

あなたの例は非常に簡単で読みやすくすることができます:

use MrRio\ShellWrap as sh;

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

Phpを使用してxmlファイルを開きたいことを理解しています。 xmlファイルを解析するために呼び出されます。最良のリファレンスはこちらです。

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

0
user1888089

PHPでwgetコマンドを実行するには、次の手順を実行する必要があります。

1)Apacheサーバーがsudoersリストに追加してwgetコマンドを使用できるようにします。

2)「exec」機能が有効になっているか、PHP config。

3)「exec」コマンドをrootユーザー(つまり、sudoユーザー)として実行します

Ubuntuマシンごとのサンプルコード

#Add Apache in sudoers list to use wget command
~$ Sudo nano /etc/sudoers
#add below line in the sudoers file
www-data ALL=(ALL) NOPASSWD: /usr/bin/wget


##Now in PHP file run wget command as 
exec("/usr/bin/Sudo wget -P PATH_WHERE_WANT_TO_PLACE_FILE URL_OF_FILE");
0
vinod