[Snippets]Import der .gz Dateien mit allow_url_fopen auf off

Tools für alle.

Moderator: Agatho

[Snippets]Import der .gz Dateien mit allow_url_fopen auf off

Beitragvon Shadow-Dragon » 13.03.2008, 16:42

Code: Alles auswählen
class import
{
   var $data;

   function upload($file)
   {
      if ( @ini_get('allow_url_fopen') == '1' || strtolower(@ini_get('allow_url_fopen')) == 'on' )
      {
         if ( !$this->data = @gzfile($file) )
         {
            return false;
         }
      }
      else
      {
         $file_url = parse_url($file);

         $fsock = @fsockopen($file_url['host'], 80, $errno, $errstr, 30);
         if (!$fsock)
         {
            return false;
         }

         $header = "GET ".$file_url['path']." HTTP/1.0".chr(10);
         $header .= "HOST: " . $file_url['host'].chr(10);
         $header .= "Connection: close".chr(10).chr(10);

         fwrite($fsock, $header);

         $file = trim(fgets($fsock, 4096));

         if (!strpos($file, "200"))
         {
            fclose($fsock);
            return FALSE;
         }

         while (trim(fgets($fsock, 4096)) != "");

         $this->data = "";
         while (!feof($fsock))
         {
            $this->data .= fgets($fsock, 128);
         }
         fclose($fsock);

         $this->data = gzinflate(substr($this->data, 10));
         $this->data = explode("\n", $this->data);
      }

      foreach ( $this->data as $id => $dummy )
      {
         $this->data[$id] = trim($this->data[$id]);
         $this->data[$id] = explode("\t", $this->data[$id]);

         if ( empty($this->data[$id][0]) )
         {
            unset($this->data[$id]);
         }
      }

      return true;
   }
}
[19:24:24] <Slavomir> der obere Teil soll NICHT zum Planen sein
[19:24:39] <Slavomir> deswegen heisst es ja auch Terminplaner

[19:20:16] <Neo767> du bist eher wie unkraut
[19:20:22] <Neo767> dich kriegt man ned kaputt ^^

[13:25:28] <kpl> 1 bit sind 8 byte
Benutzeravatar
Shadow-Dragon
Böser Foren Drache
Böser Foren Drache
 
Beiträge: 1701
Registriert: 25.01.2004, 22:50
Wohnort: Bonn

Re: [Snippets]Import der .gz Dateien mit allow_url_fopen auf off

Beitragvon Estella » 13.03.2008, 17:49

Das klappt soweit alles bestens, für all die, die jedoch nicht wissen was sie mit de Klasse machen sollen und einfach nur erstmal die Dateien runterziehen wollen, hier nochmal das 'gleiche' evtl. ein wenig einfacher, das zum reinen c&p reicht.

Code: Alles auswählen
$source='http://srv04.uga-agga.de/upload/caves.gz';
$today = date("YmdHis");
$destdirold='./old_caves';
$destnameold='caves'.$today.'.gz';
$destdir='./caves';

function upload($file)
{
   global $destnameold;
   global $destdir;
   global $destdirold;
   $result;

   $file_url = parse_url($file);
   
    $fsock = fsockopen($file_url['host'], 80, $errno, $errstr, 30);
    if (!$fsock){
     return false;
    }
    if(!$fsock){
     echo 'Konnte keine Fsocket-Verbindung aufbauen.<br />';
     exit();
    }
   

    $header = "GET ".$file_url['path']." HTTP/1.0".chr(10);
    $header .= "HOST: " . $file_url['host'].chr(10);
    $header .= "Connection: close".chr(10).chr(10);

    fwrite($fsock, $header);

    $file = trim(fgets($fsock, 4096));
    if (!strpos($file, "200")){
     fclose($fsock);
     echo 'Falsche Daten '.date("ymd").'<br>';
     return FALSE;
    }
    while (trim(fgets($fsock, 4096)) != "");
    while(!feof($fsock)){
     $result .= fgets($fsock, 128); // Antwort lesen
    }
    fclose($fsock);

   if (!($lp = fopen('./caves/caves.gz', 'w')))
    return;
   fwrite($lp, $result);
   fclose($lp);
   $dest=$destdirold.'/'.$destnameold;
   if (!($lp = fopen($dest, 'w')))
    return;
   fwrite($lp, $result);
   fclose($lp);
}


Diese Funktion wird dann einfach mittels upload() aufgerufen. Sie speichert die caves.gz einmal in dem Ordner /caves und macht gleich noch eine Kopie in den Ordner /old_caves, der als Archiv dient.
Die Kopie erhält ausserdem das Datum als Teil des Dateinamens, damit keine alten Daten überschrieben werden. Wo gespeichert werden soll ist ganz am anfang angegeben:
$destdirold='./old_caves';
$destnameold='caves'.$today.'.gz';
$destdir='./caves';

Nat. müssen die Verzeichnisse /caves + /old_caves vorher von euch auf dem Webspace angelegt werden und mit entsprechenden rechten versehen werden. Die php. Datei, muss in der jetzigen Form in dem Verzeichnis liegen, von dem /caves und /old_caves dann direkte Unterverzeichnisse sind.

Naja, generell gilt wohl zu sagen, der Weg mit der Klasse von SD ist 'schöner'. Ich wollte nurmal was posten, was alles beinhält, runterladen + wegschrieben als einfache Funktion...


Grüsse 'Stella
Estella
Proviantschlepper
Proviantschlepper
 
Beiträge: 67
Registriert: 13.09.2004, 06:44


Zurück zu UA-Tools

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste