kan ik op delen van strings zoeken in array_diff?
Ik heb een script gemaakt om de files in een directory uit te lezen:
foreach(array_diff(scandir($dirPath), array('..', '.', 'thumbs', 'fullsize')) as $imageName){
Nu wil ik graag naast de 4 aangegeven waarden ook alle waarden uitsluiten waar geen '.' inzit (lees: directorynamen) kan dat met array_diff? of moet ik dan wat anders hebben?
dus iets als:
foreach(array_diff(scandir($dirPath), array('..', '.', '"alles waar geen punt in zit"')) as $imageName){
alvast super bedankt.
moet dat dan in plaat van de array_diff? of moet ik hem vervangen?
(al een paar dingen geprobeerd, maar krijg hem niet aan de gang)
kan ik de functie omdaaien? als in soort van !glob?
bij foreach(array_diff(glob(scandir('*.*')),array('.')) as $imageName) {
zoekt hij in de verkeerde directory...
bij foreach(array_diff(scandir($dirPath), array('..', '.', 'thumbs', 'fullsize')) as $imageName) {
foreach (glob("*.*") as $imagename) {
zitten de directory namen er gewoon tussen (wat raar is want zit geen . in)
ik moet alles overslaan waar GEEN punt in zit..
Toevoeging op 11/10/2010 12:10:51:
iemand?
Gewijzigd op 10/10/2010 14:47:45 door Willem Schulte
Gewijzigd op 11/10/2010 21:07:42 door Willem Schulte
Zie link SanThe
Vertel eens in woorden wat je nou precies wilt doen want dat is mij totaal niet duidelijk.
het script doorzoekt een directory en maakt een XML aan.
bij 2 subdirectries krijg ik bijvoorbeeld:
- <categories>
- <category name="Example">
<image name="Fireworks on the river side, 2010.jpg" width="1506" height="1000" />
</category>
- <category name="Landschappen">
<image name="002D3C_14102.jpg" width="531" height="800" />
<image name="003D3C_13944.jpg" width="800" height="343" />
</category>
wat er nu gebeurt als er binnen de directory landschappen een subdirectory vindt, krijg ik een error (omdat hij die probeert te openen als een file om te kijken hoe groot ze zijn.
Nu dacht ik, als ik alle name zonder . erin oversla (de directories) dat het dan wel moet werken, en dat wilde ik proberen met glob op advies van SanThe.
maar ik krijg het niet aan de gang.
het script wat wel werkt zal ik hieronder zetten:
Code (php)
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
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
<?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('..', '.', 'thumbs', 'fullsize')) as $imageName) {
list ($width, $height) = getimagesize('gallery'.DIRECTORY_SEPARATOR.$dirName.DIRECTORY_SEPARATOR.$imageName);
$imageNode = $doc->createElement('image');
$imageNode->setAttribute('name', $imageName);
$imageNode->setAttribute('width', $width);
$imageNode->setAttribute('height', $height);
$dirNode->appendChild($imageNode);
}
$categories->appendChild($dirNode);
}
return $doc->saveXML();
}
//$tm=new dirToXml();
echo dirToXml('./gallery/');
?>
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('..', '.', 'thumbs', 'fullsize')) as $imageName) {
list ($width, $height) = getimagesize('gallery'.DIRECTORY_SEPARATOR.$dirName.DIRECTORY_SEPARATOR.$imageName);
$imageNode = $doc->createElement('image');
$imageNode->setAttribute('name', $imageName);
$imageNode->setAttribute('width', $width);
$imageNode->setAttribute('height', $height);
$dirNode->appendChild($imageNode);
}
$categories->appendChild($dirNode);
}
return $doc->saveXML();
}
//$tm=new dirToXml();
echo dirToXml('./gallery/');
?>
</categories>
Toevoeging op 12/10/2010 19:44:15:
het wil maar niet werken....
Gewijzigd op 12/10/2010 22:00:02 door Willem Schulte
Kijken of ik er iets van bakken kan.
Je kunt dus het beste overal var_dump's dumpen om te kijken wat de inhoud van de variabelen zijn.
en dat heb ik geprobeeld met die GLOB regel iets hoger, maar die doet het niet...
Gewijzigd op 12/10/2010 22:12:28 door Willem Schulte
Zie dan scandir... Goed kijken.
en dat stukje lijkt wel te werken..
ik ben ERG onervaren :/ (in PHP dan)
Toevoeging op 12/10/2010 23:53:42:
okee, ben er BIJNA....
wat is de wildcard voor 'alles waar een "." in zit'?
*.* geeft ook alles waar geen "." in zit...
Toevoeging op 13/10/2010 01:48:26:
opgelost, dank
Gewijzigd op 12/10/2010 22:24:00 door Willem Schulte
En daar had je weer een link naar is_file bijvoorbeeld...
Maakt niet uit hoe onervaren je bent in php, als je die pagina goed doorleest zou je dat in principe tegen moeten komen.
Alleen als je onder deadline stress zit leer je niet altijd even zuiver
en inderdaad opgelost met is_dir
wederom thanks! :)
De key is weten wat je zoekt. Wat wil je? Je wilt weten of iets een directory is. Dan kan je heel makkelijk die pagina bij langs gaan om te kijken of er iets over het vinden van directory wordt gezegd. En dat wordt er :-D