[Coder gesucht] SimpleXML statt Regex!?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Coder gesucht] SimpleXML statt Regex!?

    Hi.

    Mein Provider hat nun endlich PHP5 auf seinem Server laufen.

    Wollte mein Regex-Script nun umschreiben, leider krieg ich immer folgende Fehlermeldung, wenn ich das curl-Zeugs mit SimpleXML-Befehlen ersetzen will:
    "Warning: simplexml_load_file(): I/O warning : failed to load external entity"

    Hat wer einen Vorschlag, wie ich das ultra-komplizierte Script mit ein paar wenigen XML-Befehlen umschreiben kann?

    Danke!

    Hier ist das Script:

    PHP-Code:
    <?php

    function get_remote_file($url)
    {
        if (
    ini_get('allow_url_fopen')) {
            return 
    file_get_contents($url);
        }
        elseif (
    function_exists('curl_init')) {
            
    $c curl_init($url);
            
    curl_setopt($cCURLOPT_RETURNTRANSFER1);
            
    curl_setopt($cCURLOPT_HEADER0);
            
    $file curl_exec($c);
            
    curl_close($c);
            return 
    $file;
        }
        else {
            die(
    'Error');
        }
    }

    include 
    "includes/connect.php";

    $getitems="SELECT itemid,asin from phpbb_amazon";

    $getitems2=mysql_query($getitems) or die("Could not get items");

    while(
    $getitems3=mysql_fetch_array($getitems2))

    {

      
    $url="http://xyz.com (...) &ItemId=$getitems3[asin] (...)";

      
    $var=get_remote_file($url);

    // der Preis zwischen "<LowestNewPrice><FormattedPrice>EUR [i]Preis[/i]</FormattedPrice></LowestNewPrice>"
    // soll ausgelesen werden - spielt eigentlich keine Rolle ob mit oder ohne das voranstehende "EUR".
      
    $regexbest '/\<LowestNewPrice\>(?:.*)<FormattedPrice\>(.*)<\/FormattedPrice\>(?:.*)<\/LowestNewPrice\>/';

      
    preg_match($regexbest,$var,$matchbest);

      if(
    count($matchbest) == 0){

    // falls "<LowestNewPrice>" nicht vorhanden sein sollte, soll der Preis zwischen
    // "<LowestUsedPrice><FormattedPrice>EUR [i]Preis[/i]</FormattedPrice></LowestUsedPrice>" ausgelesen werden
      
    $regexbest '/\<LowestUsedPrice\>(?:.*)<FormattedPrice\>(.*)<\/FormattedPrice\>(?:.*)<\/LowestUsedPrice\>/';

      
    preg_match($regexbest,$var,$matchbest);

      
    $pricebest $matchbest[1];

      }else{

      
    $pricebest $matchbest[1];

      }

      
    $updatecron="Update phpbb_amazon set price='$pricebest' where itemid='$getitems3[itemid]'";

      
    mysql_query($updatecron) or die("Could not update cron");

    // der Preis zwischen "<Price><FormattedPrice>EUR [i]Preis[/i]</FormattedPrice></Price>" soll ausgelesen werden
      
    $regexamazon '/\<Price\>(?:.*)<FormattedPrice\>(.*)<\/FormattedPrice\>(?:.*)<\/Price\>/';

      
    preg_match($regexamazon,$var,$matchamazon);

      if(
    count($matchamazon) == 0){

      
    $priceamazon "ausverkauft";

      }else{

      
    $priceamazon $matchamazon[1];
      
      }

      
    $updatecron="Update phpbb_amazon set amazonprice='$priceamazon' where itemid='$getitems3[itemid]'";

      
    mysql_query($updatecron) or die("Could not update cron");

      
    mysql_query("Delete from bgook");

    }

    ?>
    Zuletzt geändert von baerenwurm; 02.10.2008, 15:07.

  • #2
    Wenn du doch schon ne brauchbare Fehlermeldung erhätst, dann lass uns doch lieber dieses Problem beheben, anstatt den ganzen Code von Null zu fordern. Die Aussichten dass dir dabei jemand hilft, sind größer.

    Kommentar


    • #3
      Ich weiß ja eigentlich schon woran's liegt; müsste theoretisch nur meinen Provider anschreiben und ihn bitten, "allow_url_fopen" auf "on" zu setzen - macht er aber nicht. Folglich geht's wohl ohne curl nicht...

      Ich will nur die $regex = 'xyz';-Sachen mit einfachen SimpleXML-Befehlen ersetzen.

      [e] Oder kann ich bei meinem Provider eine bestimmte URL freischalten lassen?
      Zuletzt geändert von baerenwurm; 02.10.2008, 15:13.

      Kommentar


      • #4
        Ja und? Wo ist dann dein Problem? Du hast die CURL-Lösung doch schon. Die ist im übrigen auch sauberer als sich auf die url-wrapper zu verlassen.
        Ich will nur die $regex = 'xyz';-Sachen mit einfachen SimpleXML-Befehlen ersetzen.
        Konkretes Problem?

        Übrigens kann man mit simpleXML auch wunderbar objektorientiert programmieren.

        Kommentar


        • #5
          Original geschrieben von TobiaZ
          Konkretes Problem?
          Ein konkretes "Problem" gibt's nicht; funktioniert eigentlich alles. Ich dachte, es sei einfach eleganter (und evtl. auch schneller), wenn ich statt regex hier SimpleXML benutze.

          Kommentar


          • #6
            Meine Frage bezog sich eher auf ein "konkretes Problem" bei der Umsetzung des ganzen via SimpleXML.

            Kommentar

            Lädt...
            X