dynamische Slideshow mit php & xml

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

  • dynamische Slideshow mit php & xml

    Folgendes problem habe ich:
    Ich habe mir ein php script gebastelt welches mir die verzeichnisstrucktur ab einer betimmten ebene ausließt und daraus eine xml-datei erzeugt seltsamer weise funzt das mit dem ersten ordner problemlos doch ab dem zweiten tauchen mit einem mal die bildeinträge dreimal auf siehe beispiel:

    images.xml
    [list=1]
    <?xml version="1.0" encoding="UTF-8"?>
    <gallery>
    <album id="website1.com" title="website1.com" lgPath="./ssp/gallery/website1.com/" description="Promotingpics
    of www.website1.com">
    <img src="1.jpg" link="./ssp/gallery/website1.com/1.html" caption="Please visit: www.website1.com" />
    <img src="2.jpg" link="./ssp/gallery/website1.com/2.html" caption="Please visit: www.website1.com" />
    <img src="3.jpg" link="./ssp/gallery/website1.com/3.html" caption="Please visit: www.website1.com" />
    </album>
    <album id="website2.com" title="website2.com" lgPath="./ssp/gallery/website2.com/" description="Promotingpics
    of www.website2.com">
    <img src="1.jpg" link="./ssp/gallery/website2.com/1.html" caption="Please visit: www.website2.com" />
    <img src="2.jpg" link="./ssp/gallery/website2.com/2.html" caption="Please visit: www.website2.com" />
    <img src="3.jpg" link="./ssp/gallery/website2.com/3.html" caption="Please visit: www.website2.com" />
    <img src="1.jpg" link="./ssp/gallery/website2.com/1.html" caption="Please visit: www.website2.com" />
    <img src="2.jpg" link="./ssp/gallery/website2.com/2.html" caption="Please visit: www.website2.com" />
    <img src="3.jpg" link="./ssp/gallery/website2.com/3.html" caption="Please visit: www.website2.com" />
    <img src="1.jpg" link="./ssp/gallery/website2.com/1.html" caption="Please visit: www.website2.com" />
    <img src="2.jpg" link="./ssp/gallery/website2.com/2.html" caption="Please visit: www.website2.com" />
    <img src="3.jpg" link="./ssp/gallery/website2.com/3.html" caption="Please visit: www.website2.com" />
    </album>
    </gallery> [/list=1]


    das ist schonmal das erste prob ich weiß nicht woran das liegen könnte ...
    und das zweite prob die pics sollen beim draufklicken in vergrößerter form dargestellt werden alles kein prob nur möchte ic[/code]h nicht jedesmal die htmlseiten per hand erzeugen sondern das am besten ebenfalls vom php-script machen lassen.

    Achso hier erstmal das php-script von mir was so leicht buggi ist

    make.php



    PHP-Code:
    <?php 
    //File where all album folders and files are listen 
    $fn="images.xml"
    $fp=fopen($fn,"w"); 

    //Directory where all album folders are located 
    $albums_dir './ssp/gallery/'

    //Get directories for photo albums 
    $d dir($_SERVER['DOCUMENT_ROOT'].$albums_dir); 
    while (
    false !== ($entry $d->read())) { 
       if(
    is_dir($d->path.'/'.$entry) && $entry != '.' && $entry != '..') { 
          
    $albums[] = $entry
       } 

    $d->close(); 

    //Send content type as text/xml so the browser knows it's an xml file 
    header('Content-type: text/xml'); 

    //Generate xml data 
    fwrite($fp,'<?xml version="1.0" encoding="utf-8"?>'); 
    fclose($fp); 
    $fp=fopen($fn,"a"); 
    fwrite($fp,'<gallery>'); 
    for(
    $i 0$i sizeof($albums); $i++) { 
       
    $album_title ucwords(eregi_replace('_',' ',$albums[$i])); //Remove underscores and capitalize the words in the album directory 
       
    fwrite($fp,'  <album title="'.$album_title.'" description="" lgPath=".'.$albums_dir.''.$albums[$i].'/">'); 
        
       
    // Load all photos for this album into an array, then print them out 
       
    $album_photos_dir $_SERVER['DOCUMENT_ROOT'].$albums_dir.'/'.$albums[$i].'';  
       
    $dh  opendir($album_photos_dir); 
       while (
    false !== ($filename readdir($dh))) { 
          if (
    eregi("jpg",$filename)) { 
             
    $album_photos[] = $filename
          } 
       } 
       for(
    $j 0$j sizeof($album_photos); $j++) { 
          
    fwrite($fp,'    <img src="'.$album_photos[$j].'" caption="Please visit: [url]www.[/url]'.$albums[$i].'" link="" />'); 
       } 
       
    fwrite($fp,'  </album>'); 

    fwrite($fp,'</gallery>'); 
    fclose($fp); 

    ?>
    was mache ich nur falsch???

  • #2
    also ich habe mich nochmal rangesetzt und alles "umstrukturiert"
    nur leider scheint das problem in der zweiten for schleife zu hängen wie es
    mir scheint nur sehe ich dort keinen fehler ????

    hier nochmal das script:

    PHP-Code:
    <?php
    //Directory where all album folders are located
    $albums_dir '/ssp/gallery/'
    //XML-File
    $xmlFile 'images.xml';
    $xmlPath './';

    //Get directories for photo albums

    $d dir($_SERVER['DOCUMENT_ROOT'].$albums_dir);

    while (
    false !== ($entry $d->read())) {

       if(
    is_dir($d->path.'/'.$entry) && $entry != '.' && $entry != '..') {
            
    $albums[] = $entry;
        }
    }
    $d->close();


    //Send content type as text/xml so the browser knows it's an xml file

    header('Content-type: text/xml'); 

    // start xml output variable
        
    $output .= '<?xml version="1.0"?>';
        
    $output .= '<gallery>';
    // Prevent PHP from timing out on large folders
        
    set_time_limit(0);

    for(
    $i 0$i sizeof($albums); $i++) {

    //Remove underscores and capitalize the words in the album directory
        
    $album_title ucwords(eregi_replace('_',' ',$albums[$i]));
        
    $output .= '<album title="'.$album_title.'" description="" 
    lgPath="'
    .$albums_dir.''.$albums[$i].'/">';
        
    // Load all photos for this album into an array, then print them out
        
    $album_photos_dir $_SERVER['DOCUMENT_ROOT'].$albums_dir.'/'.$albums[$i].'';  
        
    $dh  opendir($album_photos_dir);
        while (
    false != ($filename readdir($dh))) {
            if (
    eregi("jpg",$filename)) {
                
    $album_photos[] = $filename;
            }
        }
        for(
    $j 0$j sizeof($album_photos); $j++) {
            
    $output .= '<img src="'.$album_photos[$j].'" caption="Please visit: [url]www.[/url]'.$albums[$i].'" link="'.$albums_dir.''.$albums
    [$i].'/'.$album_photos[$j].'" />';
        }
        
    $output .= '</album>';
    }

    $output .= '</gallery>';

            
    // Attempt to open the xml file for writing (will be 
    created if it doesn't exist)

            if(!$xml = @fopen($xmlPath."/".$xmlFile, "w")) {
                  echo '
    <p>Error'.$xmlPath."/".$xmlFile.' file 
    could not be opened 
    for writing. <br />';

                echo '
    Check to be sure either the 
    permissions 
    for the folder are set to 777 or, if the xml<br />';

                echo '
    file already existsthat it is set to 
    777.
    </p>';
            } else {
            
                // Write the xml file
                if (fwrite($xml, $output) === FALSE) {
                    echo '
    <p>ErrorUnable to write to
     file
    .</p>';
                } else {
                  
                    fclose($xml);
                    echo '
    <p><strong>Your XML file has been created successfully.</strong></p>';
                }
            
            }
    ?>
    das problem mit dem automatischen erstellen der html's für die ansicht des
    bildes allein hatte ich mir wie folgt vorgestellt:

    PHP-Code:
    ...
    ...
    ...
    $htmlfile "$filename.html";
    $htmlcontent '<html><head></head><body><center>
    <a href="http://www."'
    .$albums[$i].'><img src="1.jpg" alt=""
     border="0"></a></center></body></html>'
    ;

    $fp=fopen($albums_dir."".$albums[$i]."/".$htmlfile,"w");
    fwrite($htmlfile,$htmlcontent);
    fclose($htmlfile);
    ...
    ...
    ... 
    geht aber auch nicht... muss ich noch auf etwas bestimmtes achten wenn
    ich die variable $htmlcontent mit der zukünftigen htmldatei füttere???
    weil wegen den variablen vom script den anführungszeichen und so
    die fehlermeldung lautet:

    Warning: fopen(/ssp/gallery/ordner/10.jpg.html)
    [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\ssp\make.php on line 41

    Warning: fwrite(): supplied argument is not a valid stream resource in C:\wamp\www\ssp\make.php on line 42








    achso und noch etwas an gewisse leute hier ....
    meckert nicht immer gleich los wenn die postings horrizontal zu lang
    geraten. dafür kann doch keiner was in anderen foren wird automatisch
    umgebrochen ...
    wir machen das doch nicht um euch zu ärgern sondern sind für jede hilfe
    dankbar ...

    Kommentar


    • #3
      also wens intressiert ... bin selber drauf gekommen was der fehler war. funzt nun alles wie es soll. hier das script für die die vielleicht noch am grübeln sind... (und nicht wegen zeilnumbrüche mekern, nehmts wies kommt oder nicht ;-) )

      PHP-Code:
      <?php
      //Directory where all album folders are located
      $albums_dir '/ssp/gallery/'
      //XML-File
      $xmlFile 'images.xml';
      $xmlPath '../';

      //Get directories for photo albums
      $d dir($_SERVER['DOCUMENT_ROOT'].$albums_dir);
      while (
      false !== ($entry $d->read())) {
         if(
      is_dir($d->path.'/'.$entry) && $entry != '.' && $entry != '..') {
              
      $albums[] = $entry;
          }
      }
      $d->close();

      //Send content type as text/xml so the browser knows it's an xml file
      header('Content-type: text/xml'); 

      // start xml output variable
          
      $output .= '<?xml version="1.0"?>';
          
      $output .= '<gallery>';
      // Prevent PHP from timing out on large folders
          
      set_time_limit(0);

      for(
      $i 0$i sizeof($albums); $i++) {
      //Remove underscores and capitalize the words in the album directory
          
      $album_title ucwords(eregi_replace('_',' ',$albums[$i]));
          
      $output .= '<album title="'.$album_title.'" description="" lgPath="'.$albums_dir.''.$albums[$i].'/">';
      // Load all photos for this album into an array, then print them out
          
      $album_photos_dir $_SERVER['DOCUMENT_ROOT'].$albums_dir.'/'.$albums[$i].'';  
          
      $dh  opendir($album_photos_dir);
          while (
      false != ($filename readdir($dh))) {
             
              if (
      eregi("jpg",$filename)) {
              
      $output .= '<img src="'.$filename.'" caption="Please visit: [url]www.[/url]'.$albums[$i].'" link="'.$albums_dir.''.$albums[$i].'/'.$filename.'" />';
              }
          }


          
      $output .= '</album>';
      }

      $output .= '</gallery>';

              
      // Attempt to open the xml file for writing (will be created if it doesn't exist)
              
      if(!$xml = @fopen($xmlPath."/".$xmlFile"w")) {
                    echo 
      '<p>Error: '.$xmlPath."/".$xmlFile.' file could not be opened for writing. <br />';
                  echo 
      'Check to be sure either the permissions for the folder are set to 777 or, if the xml<br />';
                  echo 
      'file already exists, that it is set to 777.</p>';
              } else {
              
                  
      // Write the xml file
                  
      if (fwrite($xml$output) === FALSE) {
                      echo 
      '<p>Error: Unable to write to file.</p>';
                  } else {
                    
                      
      fclose($xml);
                  }
              
              }
      ?>


      PS: wenn jemand vorschläge zur verbesserung des Codes hat (sauberere schreibweise) hab ich gern ein offenes ohr..
      Zuletzt geändert von digo; 02.02.2006, 03:51.

      Kommentar


      • #4
        Hallo digo,

        danke für das Skript. Könntest Du mir trotzdem eine Frage beantworten?

        Wofür ist das
        //Send content type as text/xml so the browser knows it's an xml file
        header('Content-type: text/xml');
        ?

        Ich verstehe Deine Datei so, dass die Ausgabe an den Browser im Falle eines Fehlers html enthält und leer ist, falls alles funktioniert. Warum bekommt sie dann keinen html header?

        Den xml header für $output welches Du später in ein weitere Datei schreibst, schreibst Du doch selbst:
        $output .= '<?xml version="1.0"?>';


        Danke,
        Jack

        Kommentar

        Lädt...
        X