Dir structuur met PHP naar XML files.....

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Willem Schulte

Willem Schulte

03/09/2010 21:48:12
Quote Anchor link
PHP guru's!

Ik wil een gallery maken in flash (AS3) die categorien kan bevatten zonder met de hand steeds de XML's te genereren (flash mag nu eenmaal zelf niet op de server zoeken).

Ik heb een stapel scripts gevonden die netjes de files in een directory leest en in XML zet, maar ik snap PHP niet. (en er volledig in duiken heb ik denk ik niet nodig).

Ik heb deze scripts:

discover.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
include_once("imageHandler.php");
$tm=new imageHandler();
$data=$tm->getImageList("./");
print_r($tm->ary2xml($data,0,'',"images.xml"));
?>


en
imageHandler.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
class imageHandler {
    public function getImageList($path="img") {
            if(file_exists($path))
            {

            $i1="jpg";
            $i2="png";
            $i3="jpeg";
                       foreach(array_diff(scandir($path),array('.','..')) as $f) {
                if(is_file($path.'/'.$f) && (($i1)?ereg($i1.'$',$f):1) || (($i2)?ereg($i2.'$',$f):1) || (($i3)?ereg($i3.'$',$f):1) ) $l[]=$f;
                }

                      return $l;
            }

            else return "Path do not Exists!";
        }

        
        


    public function ary2xml($arr, $d=0, $forcetag='', $file_name='') {
    
        $data="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
        $data.="<images>\r\n";
        for($h=0; $h<count($arr); $h++) {
            $data.="<image nameI=\"".$arr[$h]."\" thumb=\"".$arr[$h]."\" />\r\n";
        }

        $data.="</images>";
    
  
        if($file_name!='') {
            @
unlink($file_name);
            $myFile = $file_name;
            $fh = fopen($myFile, 'w');
            fwrite($fh, $data);
            fclose($fh);
            return $file_name;
        }

        else return $data;
    
    }
}

?>

Deze geven als resultaat een XML file die er zo uit ziet:
images.xml:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml version="1.0" encoding="utf-8"?>

<images>

<image nameI="bolnacht.jpg" thumb="bolnacht.jpg" />
<image nameI="bolrotterdam.jpg" thumb="bolrotterdam.jpg" />
<image nameI="bolsurfplas.jpg" thumb="bolsurfplas.jpg" />
<image nameI="bolwillemsbrug.jpg" thumb="bolwillemsbrug.jpg" />
<image nameI="bolwolk.jpg" thumb="bolwolk.jpg" />
<image nameI="bolzeeland.jpg" thumb="bolzeeland.jpg" />
<image nameI="bolzonondergang.jpg" thumb="bolzonondergang.jpg" />
</images>

wat ik nou nodig heb is dat er 2 files gemaakt worden..
De bovenstaande XML in de subdirs en de directories zelf in een aparte XML met daarin de directoy namen
categorie.xml:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml version="1.0" encoding="utf-8"?>

<categories>
<category nameI="bolpanoramas" />
<category nameI="dieren" />
<category nameI="vrij werk" />
</categories>

zodat ik dit in flash kan lezen en een directory gestuurde gallery kan maken.

Is er iemand die dit voor me kan doen of iemand die weet waar ik dit kan vinden?


Alvast bedankt,
Willem
Gewijzigd op 03/09/2010 22:01:36 door Willem Schulte
 
PHP hulp

PHP hulp

11/01/2025 00:08:51
 
Pim -

Pim -

03/09/2010 22:23:56
Quote Anchor link
Kan je daar niet beter 1 XML van maken?
Dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<categories>
    <category nameI="bolpanoramas">
        <image nameI="bolnacht.jpg" thumb="bolnacht.jpg" />
    </category>
</categories>
 
Willem Schulte

Willem Schulte

03/09/2010 22:39:35
Quote Anchor link
Hoi Pim,
Dank je voor je snelle reactie.
Ja kan ook, maar ik dacht, omdat het nog al groot wordt allemaal, dat ik niet ALLES hoef te gergenereren als ik een foto toevoeg en het maakt het laten zien van een categorie weer makkelijker, want dan kan ik ALLEs in beeld zetten wat in de images.xml staat...

anders wordt de AS3 weer een stuk ingewikkelder.

denk ik :)

maar dat is ook goed als dat in PHP weer makkelijker is.


Willem
Gewijzigd op 03/09/2010 22:43:00 door Willem Schulte
 
Willem Schulte

Willem Schulte

05/09/2010 22:44:56
Quote Anchor link
Niemand?
te simpel?
verkeerd gevraagd?

of nog even wachten? :)
Gewijzigd op 05/09/2010 22:45:20 door Willem Schulte
 
Pim -

Pim -

05/09/2010 23:11:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

function dirToXml($path)
{

    $path = realpath($path);    

    $doc = new DOMDocument('1.0', 'utf-8');

    $categories = $doc->createElement('categories');
    $doc->appendChild($categories);

    foreach(array_diff(scandir($path), array('..', '.')) as $dirName) {
        $dirNode = $doc->createElement('category');
        $dirNode->setAttribute('name', $dirName);
        $dirPath = $path.DIRECTORY_SEPARATOR.$dirName;
        
        foreach(array_diff(scandir($dirPath), array('..', '.')) as $imageName) {
            $imageNode = $doc->createElement('image');
            $imageNode->setAttribute('name', $imageName);
            $dirNode->appendChild($imageNode);
        }


        $categories->appendChild($dirNode);
    }


    return $doc->saveXML();
}


?>


Ongetest en kan dus foutjes bevatten. Hopelijk zijn die er makkelijk uit te halen.
Gewijzigd op 05/09/2010 23:22:32 door Pim -
 
Willem Schulte

Willem Schulte

06/09/2010 02:11:53
Quote Anchor link
Bedankt Pim!

Hij lijkt he tnog niet te doen, maar ik zal er morgen eens met een frisse blik naar kijken :)

Willem
 
Pim -

Pim -

06/09/2010 09:51:26
Quote Anchor link
Oh ik krijg toch echt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?xml version="1.0" encoding="utf-8"?>
<categories><category name="catA"><image name="imgA.txt"/><image name="imgB.txt"/></category><category name="catB"><image name="imgC.txt"/><image name="imgD.txt"/></category></categories>

terug, lijkt dus te werken.

Let op dat je het pad goed aangeeft. Beginnen met __DIR__ of bij de server root is het betrouwbaarst.

Dus het gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
header('Content-type: text/xml');
// include de functie
echo dirToXml(__DIR__.'/images');
Gewijzigd op 06/09/2010 09:53:03 door Pim -
 
Willem Schulte

Willem Schulte

06/09/2010 11:13:25
Quote Anchor link
Pim,

Vergeef me mijn onnozelheid, maar ik weet helemaal niets van PHP.
Dus ik heb geprobeerd jouw eerste code aan te roepen uit een andere file, maar dat kreeg ik niet voor elkaar.
Toen geprobeerd er EEN .php file van te maken, maar zelfde resultaat (met zelfde meldingen).

Laatste stand is deze file:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php


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

function
dirToXml($path)
{

    $path = realpath($path);    

    $doc = new DOMDocument('1.0', 'utf-8');

    $categories = $doc->createElement('categories');
    $doc->appendChild($categories);

    foreach(array_diff(scandir($path), array('..', '.')) as $dirName) {
        $dirNode = $doc->createElement('category');
        $dirNode->setAttribute('name', $dirName);
        $dirPath = $path.DIRECTORY_SEPARATOR.$dirName;
        
        foreach(array_diff(scandir($dirPath), array('..', '.')) as $imageName) {
            $imageNode = $doc->createElement('image');
            $imageNode->setAttribute('name', $imageName);
            $dirNode->appendChild($imageNode);
        }


        $categories->appendChild($dirNode);
    }


    return $doc->saveXML();
}


$tm=new dirToXml();
echo dirToXml(__DIR__.'/gal2');
?>


geeft als resultaat:
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

Only one top level element is allowed in an XML document. Error processing resource 'http://localhost/gal2/dirtoxml.php'. ...

<b>Fatal error</b>: Class 'dirToXml' not found in <b>D:\xampp\xampp\htdocs\gal2\dirtoxml.php</b> on...

Zit ik nou totaal verkeerd?

Willem
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.