wake-up-neo.com

Wie verwende ich wget in PHP?

Ich habe diese Parameter, um eine XML-Datei herunterzuladen:

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

Wie muss ich das in PHP verwenden, um diese XML-Datei zu öffnen?

28

Wenn Sie lediglich den Inhalt in Ihre Anwendung laden möchten, müssen Sie nicht einmal wget verwenden:

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

Beachten Sie, dass diese Funktion nicht funktioniert, wenn allow_url_fopen in der php.ini oder der Webserverkonfiguration (z. B. httpd.conf) deaktiviert ist (standardmäßig aktiviert).

Wenn Ihr Host dies explizit deaktiviert oder wenn Sie eine Bibliothek schreiben, empfiehlt es sich, entweder cURL oder eine Bibliothek zu verwenden, die die Funktionalität abstrahiert, beispielsweise Guzzle .

use GuzzleHttp\Client;

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

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

wget

wget ist ein Linux-Befehl, kein PHP - Befehl. Um dies auszuführen, müssen Sie exec verwenden. Dies ist ein PHP -Befehl zum Ausführen von Shell-Befehlen.

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

Dies kann nützlich sein, wenn Sie eine große Datei herunterladen - und den Fortschritt überwachen möchten. Wenn Sie jedoch mit Seiten arbeiten, an denen Sie nur an dem Inhalt interessiert sind, gibt es einfache Funktionen, die genau dies tun.

Die exec-Funktion ist standardmäßig aktiviert, kann jedoch in einigen Situationen deaktiviert sein. Die Konfigurationsoptionen hierfür befinden sich in Ihrem php.ini. Um diese zu aktivieren, entfernen Sie exec aus der disabled_functions-Konfigurationszeichenfolge.

alternative

Mit file_get_contents können wir den Inhalt der angegebenen URL/URI abrufen. Wenn Sie die Datei nur in eine Variable einlesen müssen, ist dies die perfekte Funktion, um curl zu verwenden. Befolgen Sie die URI-Syntax , wenn Sie Ihre URL erstellen.

// 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");

Wie von Sean the Bean vermerkt, müssen Sie möglicherweise auch ändern allow_url_fopen um true in Ihrer php.ini zuzulassen, um die Verwendung einer URL in dieser Methode zuzulassen, sollte dies standardmäßig true sein.

Wenn Sie diese Datei dann lokal speichern möchten, gibt es eine Funktion file_put_contents , um diese in eine Datei zu schreiben, kombiniert mit der vorherigen. Dies könnte einen Dateidownload emulieren:

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

Sie können curl verwenden, um die Daten abzurufen und identifiziert zu werden ( für "basic" und "digest" auth ), ohne dass erweiterte Berechtigungen erforderlich sind (wie exec oder 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);

Ihr Ergebnis wird dann in der Variable $result gespeichert.

9
Adam

viele in PHP verfügbare Methoden, um eine Datei wie exec, file_get_contents, curl und fopen zu lesen, hängen jedoch von Ihren Anforderungen und Dateiberechtigungen ab

Besuchen Sie diese file_get_contents vs cUrl

Grundsätzlich file_get_contents für Sie

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

Wenn Sie Curl in PHP verwenden ...

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

Diese Methode ist nur eine Klasse und erfordert nicht das Importieren anderer Bibliotheken oder das Wiederverwenden von Code.

Ich persönlich verwende dieses Skript, das ich vor einiger Zeit erstellt habe. hier aber für diejenigen, die nicht auf diesen Link klicken möchten, können Sie ihn unten anzeigen. Der Entwickler kann die statische Methode HTTP::GET($url, $options) verwenden, um die Methode get in curl zu verwenden, während er benutzerdefinierte Curl-Optionen durchlaufen kann. Sie können auch HTTP::POST($url, $options) verwenden, aber ich verwende diese Methode kaum.

/**
  *  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 ist ein großartiges Werkzeug für die Verwendung der Befehlszeile in PHP!

Ihr Beispiel kann sehr einfach und lesbar gemacht werden:

use MrRio\ShellWrap as sh;

$xml = (string)sh::curl(['u' => 'user:pass'], 'http://example.com/file.xml');
1
Limon Monte
<?php
function wget($address,$filename)
{
  file_put_contents($filename,file_get_contents($address));
}
?>

benutzen:

<?php
wget(URL, FileName);
?>
0
Seyyed AMir

Ich verstehe, dass Sie eine XML-Datei mit PHP öffnen möchten. Das wird aufgerufen, um eine XML-Datei zu analysieren. Die beste Referenz ist hier.

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

0
user1888089

Um den Befehl wget in PHP auszuführen, müssen Sie folgende Schritte ausführen:

1) Erlauben Sie dem Apache-Server die Verwendung des Befehls wget, indem Sie ihn der Sudoers-Liste hinzufügen.

2) Prüfen Sie, ob die Funktion "exec" aktiviert ist oder in Ihrer PHP - Konfiguration vorhanden ist.

3) Führen Sie den Befehl "exec" als Root-Benutzer aus, d. H. Sudo-Benutzer

Nachfolgendes Codebeispiel gemäß Ubuntu-Gerät

#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