Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] "." en ".." weg halen uit array

Pagina: 1
Acties:

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
Beste Mede Tweakers,

Ik ben al aardig bekend met PHP, maar minder bekend met array's binnen php.

Wat wil ik bereiken:

FTP verbinding opzetten om de inhoud van een bepaalde directory (met foto's) weer te geven.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // connect and login to FTP server
    $ftp_server = "Hostname";
    $ftp_username = "User";
    $ftp_password = "password";
    $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
    $login = ftp_login($ftp_conn, $ftp_username, $ftp_password);
            
    // change the current directory to foto's 
    $curdir = ftp_chdir($ftp_conn, "projecten/klanten/" .$row['customer']."/afgerond/" .$row['date']. "/");
        
    // Set current directory name
    $dir = ftp_pwd($ftp_conn);
                        
    // get file list of current directory 
    // initial array
    $array = ftp_nlist($ftp_conn, $dir);


tot zover gaat het goed, alleen als ik de inhoud van de array in de <img> tag wil zetten krijg ik 2 img tags waar hij de afbeelding niet kan tonen (omdat het . en .. zijn)

Nu heb ik op google dit stukje code gevonden:
PHP:
1
2
3
// remove elements with . and ..
foreach($array as $key => $item)
if(in_array($item, array('.', '..'))) unset($array[$key]);


Wat ik van boven staande stukje code begreep, was dat het . en .. zou weg halen uit de array, Maar dat werkt niet.
Mis ik iets, of kan het niet omdat het een array is die wordt gevuld door ftp_nlist() ?
Groeten,

Dennis

[ Voor 3% gewijzigd door malibucola86 op 27-03-2014 11:06 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PHP:
1
2
3
4
5
6
7
$array = array('foo','bar','.','..','baz');

// remove elements with . and .. 
foreach($array as $key => $item) 
if(in_array($item, array('.', '..'))) unset($array[$key]); 

var_dump($array);

array(3) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [4]=>
  string(3) "baz"
}


Works for me. Je zult dus even moeten kijken wat 't verschil is; en dat betekent Debuggen: Hoe doe ik dat?.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Als je dat stukje code op Google hebt gevonden kun je beter een andere site zoeken. De array waar je doorheen aan het loopen bent muteren terwijl je erdoorheen loopt is doorgaans een bijzonder slecht idee. Ik heb geen idee of PHP het wel fijn vindt maar andere talen vaak in elk geval niet.

Verder zou die snippet wel moeten werken, mits bovenstaande geen probleem is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
NMe schreef op donderdag 27 maart 2014 @ 11:13:
Als je dat stukje code op Google hebt gevonden kun je beter een andere site zoeken. De array waar je doorheen aan het loopen bent muteren terwijl je erdoorheen loopt is doorgaans een bijzonder slecht idee. Ik heb geen idee of PHP het wel fijn vindt maar andere talen vaak in elk geval niet.

Verder zou die snippet wel moeten werken, mits bovenstaande geen probleem is.
Bedoelde niet dat ik die code letterlijk gevonden heb, maar meer de functie unset dat je daar mee dingen uit je array kan halen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

En dat klopt. ;) Maar dingen uit de array waar je overheen loopt halen is niet zo handig. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
RobIII schreef op donderdag 27 maart 2014 @ 11:12:
PHP:
1
2
3
4
5
6
7
$array = array('foo','bar','.','..','baz');

// remove elements with . and .. 
foreach($array as $key => $item) 
if(in_array($item, array('.', '..'))) unset($array[$key]); 

var_dump($array);

array(3) {
  \[0]=>
  string(3) "foo"
  \[1]=>
  string(3) "bar"
  \[4]=>
  string(3) "baz"
}


Works for me. Je zult dus even moeten kijken wat 't verschil is; en dat betekent Debuggen: Hoe doe ik dat?.
Dus het geeft geen verschil of je zelf een array met inhoud maakt of dat een php functie die array vult? unset zou op beide manier moeten doen?.

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Ik zou array_filter gebruiken:

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
function myFilter($var)
{
    return $var !== "." && $var !== "..";
}

$array = array('foo','bar','.','..','baz'); 

var_dump(array_filter($array, "myFilter"));
?>


array(3) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(3) "baz"
}

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
NMe schreef op donderdag 27 maart 2014 @ 11:15:
En dat klopt. ;) Maar dingen uit de array waar je overheen loopt halen is niet zo handig. :)
Oh zo bedoel je, is er een andere manier waarop ik die "."en ",," uit de array gemaakt door ftp_nlist() kan halen?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
malibucola86 schreef op donderdag 27 maart 2014 @ 11:17:
Dus het geeft geen verschil of je zelf een array met inhoud maakt of dat een php functie die array vult? unset zou op beide manier moeten doen?.
Wat denk je zelf? Heb je het al eens geprobeerd? Al eens bekeken wat die functie precies teruggeeft? Als die code bij jou niet werkt is er klaarblijkelijk een verschil; en dat zul je dus moeten zoeken. Maar having said that: ik denk dat je sowieso beter eerst even de tips van NMe en Aloys ter harte kunt nemen en dan pas weer eens kijken hoe je die "." en ".." uit je array wipt.

[ Voor 4% gewijzigd door RobIII op 27-03-2014 11:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
RobIII schreef op donderdag 27 maart 2014 @ 11:20:
[...]

Wat denk je zelf? Heb je het al eens geprobeerd? Al eens bekeken wat die functie precies teruggeeft? Als die code bij jou niet werkt is er klaarblijkelijk een verschild; en dat zul je dus moeten zoeken. Maar having said that: ik denk dat je sowieso beter eerst even de tips van NMe en Aloys ter harte kunt nemen en dan pas weer eens kijken hoe je die "." en ".." uit je array wipt.
Jij geeft een voorbeeld met een zelf ingevulde array, uiteraard werkt dat en dat werkt bij mij ook. Maar de array die ik krijg van:
PHP:
1
$array = ftp_nlist($ftp_conn, $dir);


Daar werkt het niet mee, daarom dat ik hier op Tweakers ook hulp vroeg.

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
misschien handig om even het resultaat van var_dump($array); hier neer te zetten ;)

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
Output van var_dump($array);

PHP:
1
2
3
4
5
6
7
8
9
10
Array(9) { 
[0]=> string(78) "IMG_0023.jpg" 
[1]=> string(67) "/Voorjaar 2013/." 
[2]=> string(78) "IMG_0019.jpg" 
[3]=> string(78) "IMG_0027.jpg" 
[4]=> string(78) "IMG_0018.jpg" 
[5]=> string(78) "IMG_0028.jpg" 
[6]=> string(68) "/Voorjaar 2013/.."
[7]=> string(78) "IMG_0026.jpg" 
[8]=> string(78) "IMG_0024.jpg" }

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
malibucola86 schreef op donderdag 27 maart 2014 @ 11:29:
Output van var_dump($array);

PHP:
1
2
3
4
5
6
7
8
9
10
Array(9) { 
[0]=> string(78) "IMG_0023.jpg" 
[1]=> string(67) "/Voorjaar 2013/." 
[2]=> string(78) "IMG_0019.jpg" 
[3]=> string(78) "IMG_0027.jpg" 
[4]=> string(78) "IMG_0018.jpg" 
[5]=> string(78) "IMG_0028.jpg" 
[6]=> string(68) "/Voorjaar 2013/.."
[7]=> string(78) "IMG_0026.jpg" 
[8]=> string(78) "IMG_0024.jpg" }
A daar hebben we hem al :)
de string is niet ".." maar "/Voorjaar 2013/.."

code:
1
2
3
foreach($array as $key => $item) {
if(substr($array[$key], -1) == ".") { unset($array[$key]);}  
}

[ Voor 9% gewijzigd door xleeuwx op 27-03-2014 11:34 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
malibucola86 schreef op donderdag 27 maart 2014 @ 11:29:
Output van var_dump($array);

PHP:
1
2
3
4
5
6
7
8
9
10
Array(9) { 
[0]=> string(78) "IMG_0023.jpg" 
[1]=> string(67) "/Voorjaar 2013/." 
[2]=> string(78) "IMG_0019.jpg" 
[3]=> string(78) "IMG_0027.jpg" 
[4]=> string(78) "IMG_0018.jpg" 
[5]=> string(78) "IMG_0028.jpg" 
[6]=> string(68) "/Voorjaar 2013/.."
[7]=> string(78) "IMG_0026.jpg" 
[8]=> string(78) "IMG_0024.jpg" }
8)7
Je wil "." en ".." niet hebben maar vervolgens zitten er andere zaken in je array. En dan vind je 't gek dat 't niet werkt? ;) Precies daarom zei ik dus:
RobIII schreef op donderdag 27 maart 2014 @ 11:12:
Je zult dus even moeten kijken wat 't verschil is; en dat betekent Debuggen: Hoe doe ik dat?.
en
RobIII schreef op donderdag 27 maart 2014 @ 11:20:
Al eens bekeken wat die functie precies teruggeeft?

[ Voor 11% gewijzigd door RobIII op 27-03-2014 11:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 21-11 18:51
Anders even kijken met is_dir() of het om een directory gaat, dat kan mooi met de array_filter functie van Aloys. Ik ga het niet voor je voorkauwen, dus de complete oplossing mag je zelf verzinnen :)

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
/voorjaar 2013/ is de directory waar de foto's in staan, had in me reactie voorjaar 2013 misschien weg moeten halen.

Maar dacht dat het duidelijker zou zijn op deze manier, kennelijk brengt het alleen verwarring.
Er zitten geen directories in Voorjaar 2013. Staan alleen aantal foto;s in.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
malibucola86 schreef op donderdag 27 maart 2014 @ 11:35:
/voorjaar 2013/ is de directory waar de foto's in staan, had in me reactie voorjaar 2013 misschien weg moeten halen.
Nee, juist niet. Ik zie net dat je de "var_dump" aangepast hebt (want alle string-lengtes (78, 67, 68) kloppen niet).

Je geeft in je probleem aan ".." en "." uit de array te willen verwijderen, maar in werkelijkheid zit er helemaal geen ".." en "." in je array maar "blatiebla/." en "blatiebla/..". Hoe moeten wij je nou kunnen helpen als je a) je probleem niet goed neerzet en b) de resultaten van output waar we om vragen aanpast en niet de werkelijkheid weergeeft :?

Kortom: je wil dus "blatiebla/." en "blatiebla/.." verwijderen.

[ Voor 18% gewijzigd door RobIII op 27-03-2014 11:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
RobIII schreef op donderdag 27 maart 2014 @ 11:37:
[...]

Nee, juist niet. Ik zie net dat je de "var_dump" aangepast hebt (want alle string-lengtes kloppen niet).

Je geeft in je probleem aan ".." en "." uit de array te willen verwijderen, maar in werkelijkheid zit er helemaal geen ".." en "." in je array maar "blatiebla/." en "blatiebla/..".
Of hij heeft het zelf al opgelost maar is daar nog niet achter :)

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 31-10 21:55
malibucola86 schreef op donderdag 27 maart 2014 @ 11:29:
Output van var_dump($array);

PHP:
1
2
3
4
5
6
7
8
9
10
Array(9) { 
[0]=> string(78) "IMG_0023.jpg" 
[1]=> string(67) "/Voorjaar 2013/." 
[2]=> string(78) "IMG_0019.jpg" 
[3]=> string(78) "IMG_0027.jpg" 
[4]=> string(78) "IMG_0018.jpg" 
[5]=> string(78) "IMG_0028.jpg" 
[6]=> string(68) "/Voorjaar 2013/.."
[7]=> string(78) "IMG_0026.jpg" 
[8]=> string(78) "IMG_0024.jpg" }
Dit klopt helemaal niet, je hebt handmatig deze var_dump aan zitten passen?
Die nummertjes achter string() zijn namelijk de lengtes van de strings, dat komt dus niet overeen.

Op deze manier kunnen wij je moeilijk helpen. Maar toch een gooi in de juiste richting:
Beware:
The array will contain complete paths, not just filenames. At least in PHP 4.3.11 when I tried
en:
http://php.net/manual/en/function.pathinfo.php

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
RobIII schreef op donderdag 27 maart 2014 @ 11:37:
[...]

Nee, juist niet. Ik zie net dat je de "var_dump" aangepast hebt (want alle string-lengtes kloppen niet).

Je geeft in je probleem aan ".." en "." uit de array te willen verwijderen, maar in werkelijkheid zit er helemaal geen ".." en "." in je array maar "blatiebla/." en "blatiebla/..".
klopt ik heb het iets aangepast omdat er gevoelige informatie instaat/stond :)

oops ik ben n00b xD heb nooit goed gekeken naar output ervan.

sorry guys

[ Voor 13% gewijzigd door malibucola86 op 27-03-2014 11:42 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
malibucola86 schreef op donderdag 27 maart 2014 @ 11:40:

Maar als ik
PHP:
1
2
echo $array['1']; 
echo $array['6'];

Krijg ik . en .. te zien en niet blatiebla/, en blatiebla/..
Echt niet. Doe eens een var_dump($array['1']); dan? Misschien dat er iets fout/scheef gaat bij 't echo'en, of je hebt al gerommeld met de array voordat je 't echo'ed, ofzo, maar je eigen var_dump uit je vorige post toont aan dat er niet "." en ".." in elementen 1 en 6 zit.
malibucola86 schreef op donderdag 27 maart 2014 @ 11:40:
klopt ik heb het iets aangepast omdat er gevoelige informatie instaat/stond :)
Dan doe je voortaan:
/foo/bar/supergeheimeinfo/blaat

vervangen door:
/foo/bar/xxxxxxxxxxxxxxxx/blaat


En lees naast Debuggen: Hoe doe ik dat? ook meteen How to debug small programs even.

[ Voor 63% gewijzigd door RobIII op 27-03-2014 11:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 21-11 18:51
Als je die gevoelige informatie niet kan delen, maak dan gewoon een ander mapje aan met wat random afbeeldingen van google, en laat daar de var_dump van zien. Dan kunnen we in ieder geval zien wat er fout gaat. Zelf in die var_dump zitten roeren schieten we niks mee op.

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
Erkel schreef op donderdag 27 maart 2014 @ 11:44:
Als je die gevoelige informatie niet kan delen, maak dan gewoon een ander mapje aan met wat random afbeeldingen van google, en laat daar de var_dump van zien. Dan kunnen we in ieder geval zien wat er fout gaat. Zelf in die var_dump zitten roeren schieten we niks mee op.
Heb je gelijk in. Ben bezig met een juist var_dump().

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Even omdat ik het gevoel heb dat het compleet gemist is: xleeuwx in "[PHP] "." en ".." weg halen uit array," geeft de oplossing allang. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op donderdag 27 maart 2014 @ 11:46:
Even omdat ik het gevoel heb dat het compleet gemist is: xleeuwx in "[PHP] "." en ".." weg halen uit array," geeft de oplossing allang. ;)
...totdat je een file hebt die blaat. heet.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • HyperioN
  • Registratie: April 2003
  • Laatst online: 31-10 21:55
NMe schreef op donderdag 27 maart 2014 @ 11:46:
Even omdat ik het gevoel heb dat het compleet gemist is: xleeuwx in "[PHP] "." en ".." weg halen uit array," geeft de oplossing allang. ;)
Behalve natuurlijk als je, hoe onwaarschijnlijk ook, een filename heb die eindigt met een .

  • roeleboel
  • Registratie: Maart 2006
  • Niet online

roeleboel

en zijn beestenboel

NMe schreef op donderdag 27 maart 2014 @ 11:46:
Even omdat ik het gevoel heb dat het compleet gemist is: xleeuwx in "[PHP] "." en ".." weg halen uit array," geeft de oplossing allang. ;)
En dan kom je een bestandsnaam tegen die op een punt eindigt...

De makkelijkste manier om hyprocrieten boos te krijgen? Confronteer ze met hun eigen uitspraken...


  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 21-11 18:51
NMe schreef op donderdag 27 maart 2014 @ 11:46:
Even omdat ik het gevoel heb dat het compleet gemist is: xleeuwx in "[PHP] "." en ".." weg halen uit array," geeft de oplossing allang. ;)
Dan haal je alles weg op "blaat." is dat wenselijk?

Drie tegelijk...

[ Voor 5% gewijzigd door Erkel op 27-03-2014 11:49 ]

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


  • Mappy
  • Registratie: December 2000
  • Laatst online: 17-11 02:45

Mappy

Piramide van Austerlitz

Lijkt me dat je dat hele ftp-path niet nodig hebt:
code:
1
2
$array = ftp_nlist($ftp_conn, $dir); 
$array=array_map('basename',$array);

En daarna het array_filter-script van een stuk hierboven.

[ Voor 12% gewijzigd door Mappy op 27-03-2014 11:55 ]

If you're Mappy and you know it clap your hands *clap clap* - Stem voor betere forum-updates!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PHP:
1
2
3
4
5
6
7
8
9
10
var_dump(IsParentOrCurrentPath('/foo/bar/baz'));
var_dump(IsParentOrCurrentPath('/foo/bar/baz/'));
var_dump(IsParentOrCurrentPath('/foo/bar/baz/.'));
var_dump(IsParentOrCurrentPath('/foo/bar/baz/..'));
var_dump(IsParentOrCurrentPath('/foo/bar/baz/blaat.'));
var_dump(IsParentOrCurrentPath('/foo/bar/baz/.blaat'));

function IsParentOrCurrentPath($path) {
    return in_array(basename($path), array('.','..'));
}

bool(false)
bool(false)
bool(true)
bool(true)
bool(false)
bool(false)


...en dat combineer je met array_filter of een for-lusje of whatever.

[ Voor 15% gewijzigd door RobIII op 27-03-2014 11:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
De oplossing van Leeuwx werkt, en het zal alleen gebruikt worden voor afbeeldingen / foto's.

Iedereen bedankt voor jullie tijd en inzet! Erg bedankt iedereen ben toch weer wijzer geworden in het php programmeren.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
It compiles! Ship it! _O_

:X

Als je nou 2 minuten extra neemt zorg je dat je 't goed doet zodat je straks, als je deze code alweer lang-en-breed vergeten bent, niet tegen "rare" problemen aan loopt. Maar goed, je verspilt hooguit je eigen tijd (tenzij je tegen die tijd weer hier komt voor hulp :P ) dus zelf weten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$paths = array(
  '/foo/bar/baz',
  '/foo/bar/baz/',
  '/foo/bar/baz/.',
  '/foo/bar/baz/..',
  '/foo/bar/baz/blaat.',
  '/foo/bar/baz/.blaat'
);

$result = array_filter($paths, function($path) {
    return !in_array(basename($path), array('.','..'));
});

var_dump($result);

array(4) {
  [0]=>
  string(12) "/foo/bar/baz"
  [1]=>
  string(13) "/foo/bar/baz/"
  [4]=>
  string(19) "/foo/bar/baz/blaat."
  [5]=>
  string(19) "/foo/bar/baz/.blaat"
}

[ Voor 34% gewijzigd door RobIII op 27-03-2014 12:03 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Overigens zou ik je aan willen raden om dit in je weergaveloop te regelen: items verwijderen uit een array is over het algemeen en vrij dure operatie (als je een array van 20 items hebt, en je verwijdert de eerste, moeten de overigen 19 vaak verplaatst worden, dit is een beetje afhankelijk van wat voor'n type lijst een 'array' precies is). Dus in je weergave gewoon de "." en ".." skippen.

https://niels.nu


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
RobIII schreef op donderdag 27 maart 2014 @ 12:00:
[...]

It compiles! Ship it! _O_

:X

Als je nou 2 minuten extra neemt zorg je dat je 't goed doet zodat je straks, als je deze code alweer lang-en-breed vergeten bent, niet tegen "rare" problemen aan loopt. Maar goed, je verspilt hooguit je eigen tijd (tenzij je tegen die tijd weer hier komt voor hulp :P ) dus zelf weten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$paths = array(
  '/foo/bar/baz',
  '/foo/bar/baz/',
  '/foo/bar/baz/.',
  '/foo/bar/baz/..',
  '/foo/bar/baz/blaat.',
  '/foo/bar/baz/.blaat'
);

$result = array_filter($paths, function($path) {
    return !in_array(basename($path), array('.','..'));
});

var_dump($result);

array(4) {
  \[0]=>
  string(12) "/foo/bar/baz"
  \[1]=>
  string(13) "/foo/bar/baz/"
  \[4]=>
  string(19) "/foo/bar/baz/blaat."
  \[5]=>
  string(19) "/foo/bar/baz/.blaat"
}
Heb je een goed punt. Even lunchen daarna kom ik terug om het goed te maken.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Hydra schreef op donderdag 27 maart 2014 @ 12:01:
Overigens zou ik je aan willen raden om dit in je weergaveloop te regelen: items verwijderen uit een array is over het algemeen en vrij dure operatie (als je een array van 20 items hebt, en je verwijdert de eerste, moeten de overigen 19 vaak verplaatst worden, dit is een beetje afhankelijk van wat voor'n type lijst een 'array' precies is). Dus in je weergave gewoon de "." en ".." skippen.
Ja en nee. Hangt er een beetje van af; als je een functie hebt die alléén files zou moeten returnen dan dien je dus in die functie die directories uit het resultaat te verwijderen. Heb je een functie die gewoon een "dir" (of "ls" voor de *N*X adepten :P ) zou returnen dan is 't beter om het in de view op te lossen. Het is dus puur het 'contract' dat die functie heeft dat bepaalt of die zaken wel of niet in de result-array moeten zitten.

Having said that: de rest van je post is een redelijke micro-optimalisatie en vooralsnog not worth it om je druk over te maken. Bij vele mutaties op big-ass arrays heb je nog enigszins kans dat hier iets te winnen valt, maar in dit geval (een directory listing) heb je wel andere problemen (veel te veel files in een directory en een O(n) "controleslag") dan dergelijke micro-optimalisaties. En dan nog heb je hooguit 2 mutaties.
malibucola86 schreef op donderdag 27 maart 2014 @ 12:05:
[...]

Heb je een goed punt. Even lunchen daarna kom ik terug om het goed te maken.
Kijk je dan ook weer even goed naar mijn var_dump? Want je zult zien dat directory-roots alsnog worden teruggegeven ($result[1]) waar je (waarschijnlijk) enkel files wil hebben ;) (En ik heb even geen idee wat ftp_nlist() precies doet aan "normalisatie" en of er überhaupt directories op zo'n manier teruggegeven kunnen worden, maar hou er rekening mee dat directories kunnen eindigen op / en/of \ ;) )

[ Voor 30% gewijzigd door RobIII op 27-03-2014 12:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Hydra schreef op donderdag 27 maart 2014 @ 12:01:
Overigens zou ik je aan willen raden om dit in je weergaveloop te regelen: items verwijderen uit een array is over het algemeen en vrij dure operatie (als je een array van 20 items hebt, en je verwijdert de eerste, moeten de overigen 19 vaak verplaatst worden, dit is een beetje afhankelijk van wat voor'n type lijst een 'array' precies is). Dus in je weergave gewoon de "." en ".." skippen.
Klopt in de meeste talen, maar AFAIK is in PHP een array intern een linked list waarbij dat issue dus niet optreedt. En juist omdat het hier een complexer voorbeeld is dan alleen . en .. verwijderen zou ik het niet in de weergavelaag doen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 21-11 16:53

DexterDee

I doubt, therefore I might be

Niet om het een of ander, maar als je alleen geinteresseerd bent in files en niet in directories, dan lijkt me dit de meest eenvoudige code:
PHP:
1
$results = array_filter($paths, "is_file");

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DexterDee schreef op donderdag 27 maart 2014 @ 12:17:
Niet om het een of ander, maar als je alleen geinteresseerd bent in files en niet in directories, dan lijkt me dit de meest eenvoudige code:
PHP:
1
$results = array_filter($paths, "is_file");
Niet voor 't een of ander, maar dat werkt dus niet ;)

PHP:
1
var_dump(is_file('/foo/bar/baz/my.jpg'));


bool(false)


is_file kijkt namelijk of de file ook bestaat.

Return Values
Returns TRUE if the filename exists and is a regular file, FALSE otherwise.
De functie heet dan ook is_file (wat impliceert (IMHO althans) of iets een file is of niet) en niet is_filename (wat ik dan eerder zou verwachten). Maar goed, 't blijft PHP :P

[ Voor 67% gewijzigd door RobIII op 27-03-2014 12:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Waarom gebruik je FTP om de directory uit te lezen, als je (gezien je het pad direct in een <img>-tag plempt) toch op dezelfde server en misschien zelfs dezelfde directory aan het werk bent?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CodeCaster schreef op donderdag 27 maart 2014 @ 12:23:
Waarom gebruik je FTP om de directory uit te lezen, als je (gezien je het pad direct in een <img>-tag plempt) toch op dezelfde server en misschien zelfs dezelfde directory aan het werk bent?
Misschien een 'cdn'(-achtig) iets? Maar da's een vraag die TS alleen kan beantwoorden idd :)

[ Voor 15% gewijzigd door RobIII op 27-03-2014 12:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
RobIII schreef op donderdag 27 maart 2014 @ 12:00:
[...]

It compiles! Ship it! _O_

:X

Als je nou 2 minuten extra neemt zorg je dat je 't goed doet zodat je straks, als je deze code alweer lang-en-breed vergeten bent, niet tegen "rare" problemen aan loopt. Maar goed, je verspilt hooguit je eigen tijd (tenzij je tegen die tijd weer hier komt voor hulp :P ) dus zelf weten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$paths = array(
  '/foo/bar/baz',
  '/foo/bar/baz/',
  '/foo/bar/baz/.',
  '/foo/bar/baz/..',
  '/foo/bar/baz/blaat.',
  '/foo/bar/baz/.blaat'
);

$result = array_filter($paths, function($path) {
    return !in_array(basename($path), array('.','..'));
});

var_dump($result);

array(4) {
  \[0]=>
  string(12) "/foo/bar/baz"
  \[1]=>
  string(13) "/foo/bar/baz/"
  \[4]=>
  string(19) "/foo/bar/baz/blaat."
  \[5]=>
  string(19) "/foo/bar/baz/.blaat"
}
Dit zou ook werken :)
code:
1
2
3
foreach($array as $key => $item) {
if(substr($array[$key], -2) == "/." || substr($array[$key], -3) == "/..") { unset($array[$key]);}  
}

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
xleeuwx schreef op donderdag 27 maart 2014 @ 12:26:
[...]


Dit zou ook werken :)
code:
1
2
3
foreach($array as $key => $item) {
if(substr($array[$key], -2) == "/." || substr($array[$key], -3) == "/..") { unset($array[$key]);}  
}
Mits ftp_nlist altijd '/' als directory-separator gebruikt (interne "normalisatie" ofzo), maar ik kan me voorstellen als je verbindt met een Windows-FTP server dat je '\' terug krijgt (eigenlijk geen idee of dat zo is, maar ik zou 't wel even dubbelchecken in de FTP RFC's ofzo). En dan bestaat er nog de kans dat de PHP op een Windows host draait waarbij je mogelijk ook weer kans hebt dat de directory-separator '\' terug komt i.p.v. '/'.

Afhankelijk van wat ftp_nlist teruggeeft bij Windows-FTP hosts zou je dus wel of niet DIRECTORY_SEPARATOR kunnen gebruiken; maar dat is wel dus een ding dat ik even zou driedubbelchecken voordat ik ermee in productie ging.

Ik lees in één van de comments:
DIRECTORY_SEPARATOR is not necessarily needed, PHP always converts / to the appropriate character in its file functions.
It is good practice, though.
Maar
a) het is een comment; de comments zijn vergeven van de meuk op php.net
b) "in its file functions" wil niet zeggen "ftp functies"
c) ik vermoed dat die comment slaat op functie-argumenten waar een \ of / in zou zitten, niet op return values

Ik zou gewoon een beetje defensief programmeren ;)

[ Voor 48% gewijzigd door RobIII op 27-03-2014 12:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Ik zou het eigenlijk een beetje andersom filteren doen.

Ik zou files met extenties die jouw procedure lust er in laten, en de rest wegknikkeren
Dan kan een gek nog 1000 dingen verzinnen maar loppt het nog steeds goed (todat je de inhoud van de files verneukt natuurlijk)

[ Voor 30% gewijzigd door Fish op 27-03-2014 12:39 ]

Iperf


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
CodeCaster schreef op donderdag 27 maart 2014 @ 12:23:
Waarom gebruik je FTP om de directory uit te lezen, als je (gezien je het pad direct in een <img>-tag plempt) toch op dezelfde server en misschien zelfs dezelfde directory aan het werk bent?
Om (denk ik) makkelijk foto's te verwijderen.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
fish schreef op donderdag 27 maart 2014 @ 12:38:
Ik zou het eigenlijk een beetje andersom filteren doen.

Ik zou files met extenties die jouw procedure lust er in laten, en de rest wegknikkeren
Dan kan een gek nog 1000 dingen verzinnen maar loppt het nog steeds goed (todat je de inhoud van de files verneukt natuurlijk)
En als ik nou eens gewoon alle files in een directory wil hebben (dus zonder specifieke extensies te willen hebben)?

Niet dat 't hier aan de orde is waarschijnlijk; TS wil waarschijnlijk alleen maar images hebben ofzo. Which brings me to the next issue: hou er dan wel rekening mee dat je waarschijnlijk case-insensitive (.jpg, .JPG, .Jpg etc.) wil filteren tenzij je 'upload' of andere manier hoe die files in de directory komen er al voor zorgt dat alles upper/lower-cased is ofzo.
malibucola86 schreef op donderdag 27 maart 2014 @ 12:41:
[...]


Om (denk ik) makkelijk foto's te verwijderen.
Benader je een remote host of je localhost? In dat laatste geval ben je echt véél te moeilijk aan 't doen waarschijnlijk.

[ Voor 15% gewijzigd door RobIII op 27-03-2014 12:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

Nee dan niet natuurlijk. puur omdat de ts het over images heeft

Iperf


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
RobIII schreef op donderdag 27 maart 2014 @ 12:42:
[...]

En als ik nou eens gewoon alle files in een directory wil hebben (dus zonder specifieke extenties te willen hebben)?

Niet dat 't hier aan de orde is waarschijnlijk; TS wil waarschijnlijk alleen maar images hebben ofzo. Which brings me to the next issue: hou er dan wel rekening mee dat je waarschijnlijk case-insensitive (.jpg, .JPG, .Jpg etc.) wil filteren tenzij je 'upload' of andere manier hoe die files in de directory komen er al voor zorgt dat alles upper/lower-cased is ofzo.


[...]

Benader je een remote host of je localhost? In dat laatste geval ben je echt véél te moeilijk aan 't doen waarschijnlijk.
Het is op een localhost. Hoe zou het makkelijker kunnen dan? Ik heb me tot nu toe aardig weten te redden. Maar dit is iets nieuws voor me :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
8)7
Als je eens even begint bij 't begin en gewoon de documentatie erbij pakt? :X

Als je op-een-of-andere-manier niet van die functies gebruik kunt maken (waarom dan? los dat op! bel je hosting! weet-ik-veel!) dan kun je als last resort nog eens (verder) gaan kijken naar omwegen via FTP o.i.d. maar daar begin je toch niet mee? 7(8)7

Als het ging om 't verwijderen van files dan zie ik écht niet hoe je dan met allerlei FTP functies op de proppen kunt komen als je gewoon [google="php delete file"] had gedaan. De eerste 2 hits zijn delete en unlink.

[ Voor 69% gewijzigd door RobIII op 27-03-2014 12:50 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

malibucola86 schreef op donderdag 27 maart 2014 @ 12:41:
[...]

Om (denk ik) makkelijk foto's te verwijderen.
En dat kun je niet zonder een FTP-verbinding naar je eigen server op te zetten?

Dit begint een beetje veel weg te hebben van een XY-probleem. ;)
RobIII schreef op donderdag 27 maart 2014 @ 12:45:
[...]

Als je op-een-of-andere-manier niet van die functies gebruik kunt maken (waarom dan? los dat op! bel je hosting! weet-ik-veel!) dan kun je als last resort nog eens (verder) gaan kijken naar omwegen via FTP o.i.d. maar daar begin je toch niet mee? 7(8)7
Je komt niet veel op SO merk ik. :+

[ Voor 53% gewijzigd door NMe op 27-03-2014 12:51 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
Zoiets
code:
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
$path = '/foo/bar/path';
$files = listFiles($path);

$count_files = count($files);   
        for($i=0; $i<$count_files; $i++) {
            
            // Do something with file -> file == $files[$i]
                
        
        }   

function listFiles( $from = '.') {
            if(! is_dir($from))
                return false;
            
            $files = array();
            $dirs = array( $from);
            while( NULL !== ($dir = array_pop( $dirs))) {
                if( $dh = opendir($dir)) {
                    while( false !== ($file = readdir($dh))) {
                        if( $file == '.' || $file == '..')
                            continue;
                            
                        $path = $dir . '/' . $file;
                        if( is_dir($path)) {
                            $dirs[] = $path;
                        } else {
                            $files[] = $path;
                        }
                    }
                    closedir($dh);
                }
            }
            return $files;
        }

[ Voor 10% gewijzigd door xleeuwx op 27-03-2014 12:52 ]


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
NMe schreef op donderdag 27 maart 2014 @ 12:47:
[...]

En dat kun je niet zonder een FTP-verbinding naar je eigen server op te zetten?

Dit begint een beetje veel weg te hebben van een XY-probleem. ;)
Mogelijk kan dat wel, maar toen ik begon met uitwerken van deze pagina was FTP eerste wat er in me op kwam om te gebruiken voor bestanden weer te geven en te verwijderen.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

FTP is voornamelijk bedoeld om bestanden te verplaatsen tussen verschillende servers. Als je enkel een lijst wil maken van bestanden op dezelfde server, gebruik dan gewoon dir(), readdir() of een FileEnumerator of hoe dat in PHP ook heet.

[ Voor 12% gewijzigd door CodeCaster op 27-03-2014 12:58 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Die functie is recursief en ook nog buggy :X (Als ik '/foo/' meegeef krijg ik '/foo//bar/blaat.txt' terug |:( )

Doe dan gewoon:
PHP:
1
2
3
4
$result = glob('/foo/bar/img/*.png');
//of
$result = glob('/foo/bar/img/*');
var_dump($result);

ofzo.

[ Voor 45% gewijzigd door RobIII op 27-03-2014 13:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
RobIII schreef op donderdag 27 maart 2014 @ 12:56:
[...]

Die functie is recursief en ook nog buggy :X (Als ik '/foo/' meegeef krijg ik '/foo//bar/blaat.txt' terug |:( )
hij is inderdaad niet monkey proof O-)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
xleeuwx schreef op donderdag 27 maart 2014 @ 12:59:
[...]


hij is inderdaad niet monkey proof O-)
En dat vermeld je er dan niet even bij? En dat geef je aan iemand die, klaarblijkelijk, nog een beginner is? Gare code jatten / googlen kunnen we allemaal wel. Een kaasschaaf aan een baby geven is doorgaans niet zo'n goed idee :)

[ Voor 26% gewijzigd door RobIII op 27-03-2014 13:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

malibucola86 schreef op donderdag 27 maart 2014 @ 12:51:
[...]


Mogelijk kan dat wel, maar toen ik begon met uitwerken van deze pagina was FTP eerste wat er in me op kwam om te gebruiken voor bestanden weer te geven en te verwijderen.
Tsja, dat is bepaald niet handig (understatement) en zou ik niet doen. Als je lokaal je bestandssysteem aan wil passen dan heb je daar de bestandssysteemfuncties voor die RobIII eerder al linkte. Ga dan niet klooien met FTP. Maak je meteen ook het filteren van die . en .. makkelijker.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • dvdheiden
  • Registratie: Maart 2006
  • Laatst online: 21:01
CodeCaster schreef op donderdag 27 maart 2014 @ 12:56:
FTP is voornamelijk bedoeld om bestanden te verplaatsen tussen verschillende servers. Als je enkel een lijst wil maken van bestanden op dezelfde server, gebruik dan gewoon dir(), readdir() of een FileEnumerator of hoe dat in PHP ook heet.
DirectoryIterator. Zit o.a. ook isDot() methode in.

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
Denk dat dat hier zijn doel beetje voorbij schiet ..
RobIII schreef op donderdag 27 maart 2014 @ 13:00:
[...]

En dat vermeld je er dan niet even bij? En dat geef je aan iemand die, klaarblijkelijk, nog een beginner is? Gare code jatten / googlen kunnen we allemaal wel. Een kaasschaaf aan een baby geven is doorgaans niet zo'n goed idee :)
het is altijd moeilijk in te schatten wat iemand zijn kennis is, daarnaast is het ook altijd om van te leren.

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
CodeCaster schreef op donderdag 27 maart 2014 @ 12:56:
FTP is voornamelijk bedoeld om bestanden te verplaatsen tussen verschillende servers. Als je enkel een lijst wil maken van bestanden op dezelfde server, gebruik dan gewoon dir(), readdir() of een FileEnumerator of hoe dat in PHP ook heet.
Helder!

Ik ga terug naar de teken tafel en kijken naar unlink() funtie.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

xleeuwx schreef op donderdag 27 maart 2014 @ 13:05:
[...]

Denk dat dat hier zijn doel beetje voorbij schiet ..
Euh...

Het doel, uit de TS:
de inhoud van een bepaalde directory weer te geven.
Ik zie niet in hoe het gebruiken van één in PHP ingebouwde klasse, die precies voor dat doel is geschreven, dat doel verder voorbijschiet dan een aan elkaar geplakte lap custom code die hetzelfde (maar dan halfslachtig) doet.

Het lijkt er dus op dat dit:
Het meest passende antwoord op de éigenlijke vraag van TS is. :)

[ Voor 26% gewijzigd door CodeCaster op 27-03-2014 13:08 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

xleeuwx schreef op donderdag 27 maart 2014 @ 13:05:
[...]

Denk dat dat hier zijn doel beetje voorbij schiet ..
Waarom? Hij gaat (al dan niet recursief) over een directory heenlopen. Een DirectoryIterator is daarvoor ideaal en als die method erin zit is dat alleen maar mooi meegenomen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
NMe schreef op donderdag 27 maart 2014 @ 13:06:
[...]

Waarom? Hij gaat (al dan niet recursief) over een directory heenlopen. Een DirectoryIterator is daarvoor ideaal en als die method erin zit is dat alleen maar mooi meegenomen.
klopt maar om als beginnende phper met classes te gaan beginnen ..

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

xleeuwx schreef op donderdag 27 maart 2014 @ 13:08:
[...]

klopt maar om als beginnende phper met classes te gaan beginnen ..
Je doet net alsof classes moeilijker zijn dan functies?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

xleeuwx schreef op donderdag 27 maart 2014 @ 13:08:
[...]


klopt maar om als beginnende phper met classes te gaan beginnen ..
Hoe is dit:
PHP:
1
2
3
4
5
foreach (new DirectoryIterator('/Pad/Naar/Directory') as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $filename = $fileInfo->getFilename();
    echo "<img src=\"$filename\" />";
}

Lastiger te begrijpen dan een lap code van 35 regels die allerlei zaken verkeerd doet? :)

Klassen zijn niet eng of zo.

[ Voor 3% gewijzigd door CodeCaster op 27-03-2014 13:11 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • dvdheiden
  • Registratie: Maart 2006
  • Laatst online: 21:01
xleeuwx schreef op donderdag 27 maart 2014 @ 13:05:
[...]

Denk dat dat hier zijn doel beetje voorbij schiet ..


[...]
Waarom zou een beginnende PHP-er niet met deze class kunnen werken. Sterker nog ik denk dat dat zelfs simpeler is. Een array van files:

PHP:
1
2
3
4
5
6
$files = array();
foreach (new DirectoryIterator('/foo/bar') as $entry) {
    if(!$entry->isDot() && !$entry->isDir()) {
        $files[] = $entry->getFilename();
    }
}

  • xleeuwx
  • Registratie: Oktober 2009
  • Laatst online: 09-11 23:39

xleeuwx

developer Tweakers Elect
CodeCaster schreef op donderdag 27 maart 2014 @ 13:10:
[...]

Hoe is dit:
PHP:
1
2
3
4
5
foreach (new DirectoryIterator('/Pad/Naar/Directory') as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $filename = $fileInfo->getFilename();
    echo "<img src=\"$filename\" />";
}

Lastiger te begrijpen dan een lap code van 35 regels die allerlei zaken verkeerd doet? :)

Klassen zijn niet eng of zo.
dat ben ik zeker met je eens. En ja klasses zijn voor beginners wel echt eng ..

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
CodeCaster schreef op donderdag 27 maart 2014 @ 13:10:
[...]

Hoe is dit:
PHP:
1
2
3
4
5
foreach (new DirectoryIterator('/Pad/Naar/Directory') as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $filename = $fileInfo->getFilename();
    echo "<img src=\"$filename\" />";
}

Lastiger te begrijpen dan een lap code van dertig regels die allerlei zaken verkeerd doet? :)

Klassen zijn niet eng of zo.
Zal wel mee vallen met hoe verkeerd die 30 regels zijn. Dat ik iets niet begreep en daarom verkeerd ben begonnen, maakt nog niet dat 30 regels niet werkt.

Want alles werkte, behalve dat ik . en .. in me <img> tag kreeg en dat snapte ik niet. En dat het met unset o.i.d. opgelost kon worden dat wist ik, maar weet/wist niet hoe.

Voor de rest werkt die hele pagina prima:)

  • dvdheiden
  • Registratie: Maart 2006
  • Laatst online: 21:01
Ook al werkt het, de kans is groot dat het efficiënter kan en daardoor ook minder foutgevoelig kan. Door er nu wat aandacht aan te besteden kan je in de toekomst problemen voorkomen.

Wat als over 1,5 jaar het FTP wachtwoord wijzigt? Weet je dan nog dat het daar staat en als effect heeft dat de code niet meer werkt?

[ Voor 52% gewijzigd door dvdheiden op 27-03-2014 13:16 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

malibucola86 schreef op donderdag 27 maart 2014 @ 13:12:
[...]

Zal wel mee vallen met hoe verkeerd die 30 regels zijn. Dat ik iets niet begreep en daarom verkeerd ben begonnen, maakt nog niet dat 30 regels niet werkt.
Ik had het niet over de code uit de TS, maar over de voorgestelde code om de files in een array te krijgen.

Het is verder ook niet als belediging bedoeld als iemand je code fout noemt, je kunt enkel leren door fouten te maken. Val vooral ook niet over de toon van de reacties, want die is toch nooit goed:
there is an inherent and pervasive bias in pure-text communication which makes statements intended to be good-humoured sound sophomoric, makes statements which were intended to be friendly sound smarmy, makes statements which were intended to be enthusiastic sound brash, makes statements intended to be helpful sound condescending, makes statements which were intended to be precise and accurate sound brusque and pedantic, makes statements which were intended to be positive sound neutral, and makes statements which were intended to be neutral seem downright hostile.

[ Voor 39% gewijzigd door CodeCaster op 27-03-2014 13:17 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • DexterDee
  • Registratie: November 2004
  • Laatst online: 21-11 16:53

DexterDee

I doubt, therefore I might be

RobIII schreef op donderdag 27 maart 2014 @ 12:19:
[...]

Niet voor 't een of ander, maar dat werkt dus niet ;)
Wel voor de use case van de TS, aangezien de bestanden op dezelfde server staan. Maar als dit een remote FTP verbinding naar een ander system was geweest, dan is er inderdaad geen waterdichte methode om vast te stellen of een string een bestand of directory moet voorstellen.

Klik hier om mij een DM te sturen • 3245 WP op ZW


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
CodeCaster schreef op donderdag 27 maart 2014 @ 13:16:
[...]

Ik had het niet over de code uit de TS, maar over de voorgestelde code om de files in een array te krijgen.

Het is verder ook niet als belediging bedoeld als iemand je code fout noemt, je kunt enkel leren door fouten te maken. Val vooral ook niet over de toon van de reacties, want die is toch nooit goed:


[...]
Excuses _/-\o_ verkeerd geinterpreteerd :)

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
dvdheiden schreef op donderdag 27 maart 2014 @ 13:15:
Ook al werkt het, de kans is groot dat het efficiënter kan en daardoor ook minder foutgevoelig kan. Door er nu wat aandacht aan te besteden kan je in de toekomst problemen voorkomen.

Wat als over 1,5 jaar het FTP wachtwoord wijzigt? Weet je dan nog dat het daar staat en als effect heeft dat de code niet meer werkt?
Ik begrijp wat je bedoeld! Maar ik comment 95% van de dingen die ik typ zo kort, maar (1.5 jaar) duidelijk mogelijk.

  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
Ik wil even goed iedereen hartelijk bedanken voor hun feedback, kritiek, effort etc.

Ik ga kijken naar unlink() als vervanger voor het FTP gebeuren(is wel duidelijk dat dat in dit geval niet de way to go is :) ).

Alles wat ik weet van php heb ik geleerd door trial and error. Misschien is dat ook wel het probleem ?!:)

Wat zou jij me als advies nog willen geven, om beter te worden in php?!

Nogmaals iedereen bedankt voor jullie hulp en reacties.

Groeten,

Dennis

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
malibucola86 schreef op donderdag 27 maart 2014 @ 13:35:
Wat zou jij me als advies nog willen geven
Onder andere dat tweakers elkaar permanent de groeten doen en dat we het op prijs stellen als je de wijzig-link (rechtsbovenaan je post) gebruikt als je iets toe te voegen hebt terwijl je de laatste poster bent; je topic herhaaldelijk omhoogschoppen is niet nodig. Die melding staat er niet voor niets:

Afbeeldingslocatie: http://tweakers.net/ext/f/rViZSDpQ5n2TpYCcyrDz83Jf/full.png

:)

Ook hele lappen quoten om er vervolgens een enkele zin op te reageren is wat onnodig; probeer irrelevante stukjes uit quotes te verwijderen of quote helemaal niet als 't gaat om de post direct boven je.
...oh :P

In dat geval: neem één of een paar tutorials en liefst nog wat boeken door (kijk eens in ons [Alg] Centraal boekentopic - part II). Verder: als je niet weet hoe iets werkt en je "leent" wat code van iemand / elders op 't web: neem dan gewoon de documentatie er bij en probeer voor jezelf helder te krijgen wat er precies gebeurt in die code door gewoon de betreffende functies e.d. op te zoeken. Een beetje programmeur neemt niet alles klakkeloos voor waar aan maar onderzoekt en graaft dieper om zélf ergens een goed begrip van te kweken. Daarom hanteren we hier in de Devschuur® ook altijd 't motto
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
...en zul je ons dus niet snel kant-en-klare oplossingen zien aanreiken maar meestal hints in de juiste richting waarna TS meestal zélf in staat blijkt 't probleem op te lossen (en gaandeweg dus nog iets te leren).

Tot slot: je uiteindelijke probleem lag meer aan 't feit dat 't niet in je opkwam de file functies ("lokale I/O" zeg maar) te gebruiken en je dus greep naar de voor jou bekendste oplossing: FTP. Vraag je altijd af: kan dat niet makkelijker? (Of: zou 't niet makkelijker moeten kunnen/zijn?).
malibucola86 schreef op donderdag 27 maart 2014 @ 13:43:
[...]


Nooit me bedoeling geweest! Je kan rustig zeggen dat ik een forum noob ben. Maar voor de volgende keer zal ik er op letten.
En als ik dan toch bezig ben met tips geven: me mijn bedoeling ;)

[ Voor 66% gewijzigd door RobIII op 27-03-2014 13:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • malibucola86
  • Registratie: Maart 2011
  • Laatst online: 04-10-2022
je topic herhaaldelijk omhoogschoppen is niet nodig. Die melding staat er niet voor niets:.
Nooit mijn bedoeling geweest! Je kan rustig zeggen dat ik een forum noob ben. Maar voor de volgende keer zal ik er op letten.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
NMe schreef op donderdag 27 maart 2014 @ 12:08:
Klopt in de meeste talen, maar AFAIK is in PHP een array intern een linked list waarbij dat issue dus niet optreedt. En juist omdat het hier een complexer voorbeeld is dan alleen . en .. verwijderen zou ik het niet in de weergavelaag doen.
Ik dacht dat PHP ze implementeerde als hash-tables? Weet het niet zeker, is ook weer dik tien jaar geleden dat ik iets met PHP gedaan heb,

Anyway; waar het me vooral om ging is een beginner bij te brengen goed na te denken over de efficiëntie van een oplossing. Ja, met 20 entries ofzo maakt het niet uit maar hij gaat geheid dergelijke code copy-pasten in andere toepassingen dus ik vind het belangrijk dat iemand zich realiseert wat er onderwater gebeurt.

https://niels.nu


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Hydra schreef op donderdag 27 maart 2014 @ 14:28:
[...]


Ik dacht dat PHP ze implementeerde als hash-tables? Weet het niet zeker, is ook weer dik tien jaar geleden dat ik iets met PHP gedaan heb,
Klopt, maar het gaat verder dan dat. :P
The problem here obviously is that the hash function can have collisions, i.e. multiple string keys can yield the same hash. For example in a PHP array with up to 64 elements the strings "foo" and "oof" would have the same hash.

This problem is solved by not storing the value directly at the generated index, but storing a linked list of possible values instead.
Anyway; waar het me vooral om ging is een beginner bij te brengen goed na te denken over de efficiëntie van een oplossing. Ja, met 20 entries ofzo maakt het niet uit maar hij gaat geheid dergelijke code copy-pasten in andere toepassingen dus ik vind het belangrijk dat iemand zich realiseert wat er onderwater gebeurt.
Mee eens hoor, en met die intentie is ook niks mis. :) Maar in dit geval zou je wat je wint aan efficiëntie verliezen door meer logica naar je weergavelaag te halen, en dat heeft zijn eigen nadelen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op donderdag 27 maart 2014 @ 14:39:
Klopt, maar het gaat verder dan dat. :P
Dat is niet alleen in PHP zo maar in de meeste gevallen van een hashtable omdat een hashtable nou eenmaal zo werkt en collisions gewoon voorkomen.

[ Voor 9% gewijzigd door RobIII op 27-03-2014 14:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

RobIII schreef op donderdag 27 maart 2014 @ 14:52:
[...]

Dat is niet alleen in PHP zo maar in de meeste gevallen van een hashtable omdat een hashtable nou eenmaal zo werkt en collisions gewoon voorkomen.
True, maar waar het vooral om gaat is dat arrays in PHP helemaal geen arrays zijn en dus ook minder tot geen last hebben van klassieke problemen die voor arrays in andere talen hebben. PHP-arrays hebben in ruil daarvoor uiteraard wel hun eigen problemen, maar dat is niet waar deze tak van de discussie over begon. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1