/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
.GIF
Fra : Ronni Andersen


Dato : 21-07-04 10:40

Hejsa!
Jeg har følgende kode som læser i en mappe efter de aktuelle
billeder:

:::SNIP:::
<?php
$billeder = Array();

if ($handle = @opendir('_pic/_galleri/_mig')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$billeder[] = $file;
}
}
closedir($handle);
:::/SNIP:::

Jeg vil dog gerne have det sådan, at den KUN finder .gif
billederne og altså ikke tager evt. skjulte filer og lignende
med.

Hvor skal den ekstra lille kode tilføjes?

Håber hjælpen findes.

vh. Rask

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Henrik Hansen (21-07-2004)
Kommentar
Fra : Henrik Hansen


Dato : 21-07-04 11:22

Ronni Andersen wrote:
> Hejsa!
> Jeg har følgende kode som læser i en mappe efter de aktuelle
> billeder:
>
> :::SNIP:::
> <?php
> $billeder = Array();
>
> if ($handle = @opendir('_pic/_galleri/_mig')) {
> while (false !== ($file = readdir($handle))) {
> if ($file != "." && $file != "..") {
> $billeder[] = $file;
> }
> }
> closedir($handle);
> :::/SNIP:::
>
> Jeg vil dog gerne have det sådan, at den KUN finder .gif
> billederne og altså ikke tager evt. skjulte filer og lignende
> med.
>
> Hvor skal den ekstra lille kode tilføjes?
>
> Håber hjælpen findes.
>
> vh. Rask
>

du kan checke på "efternavnet" .gif så du skal have

&& substr($file, strrpos($file, "."), strlen($file)) == "gif"

med i din if

ellers kan du også bruge
http://dk2.php.net/manual/en/function.getimagesize.php den er mere
"sikker" da den checker filtypen rigtigt ikke kun om "efternavnet" er
..gif, men den er også noget langsommere, tror den første methode er "bedst".

--
Henrik Hansen

Michael Rasmussen (21-07-2004)
Kommentar
Fra : Michael Rasmussen


Dato : 21-07-04 11:27

On Wed, 21 Jul 2004 12:21:37 +0200, Henrik Hansen wrote:

> du kan checke på "efternavnet" .gif så du skal have
>
> && substr($file, strrpos($file, "."), strlen($file)) == "gif"
>
> med i din if
>
Finder dog ikke billed.GIF.
--
Hilsen/Regards
Michael Rasmussen

Get my public GnuPG keys:
mir <at> datanom <dot> net
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE501F51C
mir <at> miras <dot> org
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE3E80917
--------------------------------------------------------------
Debian Hint #4: You can see the available and installed versions for one
or more available packages with the command 'apt-cache policy <packages>'.



Henrik Hansen (21-07-2004)
Kommentar
Fra : Henrik Hansen


Dato : 21-07-04 14:33

Michael Rasmussen wrote:
> On Wed, 21 Jul 2004 12:21:37 +0200, Henrik Hansen wrote:
>
>
>>du kan checke på "efternavnet" .gif så du skal have
>>
>>&& substr($file, strrpos($file, "."), strlen($file)) == "gif"
>>
>>med i din if
>>
>
> Finder dog ikke billed.GIF.

nej så kan man lige sætte en strtolower omkring.

--
Henrik Hansen

Per Thomsen (21-07-2004)
Kommentar
Fra : Per Thomsen


Dato : 21-07-04 21:05

Henrik Hansen wrote:

> Michael Rasmussen wrote:
>
>> On Wed, 21 Jul 2004 12:21:37 +0200, Henrik Hansen wrote:
>>
>>
>>> du kan checke på "efternavnet" .gif så du skal have
>>>
>>> && substr($file, strrpos($file, "."), strlen($file)) == "gif"
>>>
>>> med i din if
>>>
>>
>> Finder dog ikke billed.GIF.
>
>
> nej så kan man lige sætte en strtolower omkring.
>

Eller evt. bruge funktionen strcasecmp
(og så skal der vist lige en '+1' til substr index, eller evt. et '.'
før 'gif')

(strcasecmp( substr($file, (strrpos($file,'.')+1)), 'gif')==0 )

Se: http://dk2.php.net/strcasecmp

MVH Per Thomsen,
http://www.pert.dk/

Michael Rasmussen (21-07-2004)
Kommentar
Fra : Michael Rasmussen


Dato : 21-07-04 11:25

On Wed, 21 Jul 2004 09:40:01 +0000, Ronni Andersen wrote:

>
> Jeg vil dog gerne have det sådan, at den KUN finder .gif billederne og
> altså ikke tager evt. skjulte filer og lignende med.
>
> Hvor skal den ekstra lille kode tilføjes?
>
Måske nedenstående løsning:

:::SNIP:::
<?php
$billeder = Array();

if ($handle = @opendir('_pic/_galleri/_mig')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." &&
preg_match("/\b.gif\b$/i", $file)) {
$billeder[] = $file;
}
}
closedir($handle);
:::/SNIP:::

--
Hilsen/Regards
Michael Rasmussen

Get my public GnuPG keys:
mir <at> datanom <dot> net
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE501F51C
mir <at> miras <dot> org
http://search.keyserver.net:11371/pks/lookup?op=get&search=0xE3E80917
--------------------------------------------------------------
Parenthesise to avoid ambiguity.
- The Elements of Programming Style (Kernighan & Plaugher)



Thomas Lindgaard (22-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 22-07-04 23:27

Davs

Jeg skrev lige følgende lille funktion her den anden dag:

function ls($dir = '.', $filter = '')
{
$files = array();
if ( ($d = opendir($dir)) !== false )
{
while ( ($file = readdir($d)) !== false )
{
// Skip . and ..
if ( in_array($file, array('.', '..')) ) continue;
// Apply filter
if ( $filter && !preg_match($filter, "$dir/$file") ) continue;
if ( is_dir("$dir/$file") )
{
$files = array_merge($files, ls("$dir/$file"));
}
else
{
$files[] = "$dir/$file";
}
}
}
sort($files);
return $files;
}

Input til funktionen er et dir og et regulært udtryk som filnavnene skal
matche - begge valgfrie.

Så man kunne f.eks. kalde

ls('./images', '_\.gif$_U');

Det skulle gerne finde alle filer med efternavnet ".gif" (uanset om det er
skrevet med store eller små bogstaver) i underbiblioteket "images".

Bemærk! Funktionen kalder sig selv rekursivt, hvis der er
underbiblioteker.

--
Mvh.
/Thomas


Jacob Atzen (23-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 23-07-04 08:33

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> Jeg skrev lige følgende lille funktion her den anden dag:

Hvorfor ikke bare bruge glob()?

[snip kode]

> Så man kunne f.eks. kalde
>
> ls('./images', '_\.gif$_U');
>
> Det skulle gerne finde alle filer med efternavnet ".gif" (uanset om det er
> skrevet med store eller små bogstaver) i underbiblioteket "images".

Så skal du have modifieren 'i' med i dit filter.

> Bemærk! Funktionen kalder sig selv rekursivt, hvis der er
> underbiblioteker.

Men så vidt jeg kan se benytter den ikke filteret når den læser
underbibliotekerne. Desuden bliver biblioteket kun scannet i det
tilfælde biblioteksnavnet matcher filteret.

--
Med venlig hilsen
- Jacob Atzen

Thomas Lindgaard (23-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 23-07-04 09:25

On Fri, 23 Jul 2004 09:33:26 +0200, Jacob Atzen wrote:

>> Jeg skrev lige følgende lille funktion her den anden dag:
>
> Hvorfor ikke bare bruge glob()?

Hmm... den kendte jeg ikke - men jeg har heller ikke brugt den i version
2 herunder, da det ser ud til at den kigger på store og små bogstaver.

>> Så man kunne f.eks. kalde
>>
>> ls('./images', '_\.gif$_U');
>>
>> Det skulle gerne finde alle filer med efternavnet ".gif" (uanset om det
>> er skrevet med store eller små bogstaver) i underbiblioteket "images".
>
> Så skal du have modifieren 'i' med i dit filter.

Det har du naturligvis ret i - det kunne være at man lige skulle køre en
test næste gang :)

>> Bemærk! Funktionen kalder sig selv rekursivt, hvis der er
>> underbiblioteker.
>
> Men så vidt jeg kan se benytter den ikke filteret når den læser
> underbibliotekerne. Desuden bliver biblioteket kun scannet i det
> tilfælde biblioteksnavnet matcher filteret.

Og det har du igen ret i (irriterende så mange fejl der kan være på så
få linier!).

Her er version 2 som gerne skulle rette de fundne fejl - den tilføjer
desuden mulighed for at slå rekursionen fra:

function ls($dir = '.', $filter = '', $recursion = true)
{
$files = array();
if ( ($d = opendir($dir)) !== false )
{
while ( ($file = readdir($d)) !== false )
{
if ( in_array($file, array('.', '..')) ) continue; // Skip . and ..
if ( is_dir("$dir/$file") && $recursion)
{
$files = array_merge($files, ls("$dir/$file", $filter, $recursion));
}
else if ( !$filter || ( $filter && preg_match($filter, "$dir/$file") ) )
{
$files[] = "$dir/$file";
}
}
}
sort($files);
return $files;
}

Og så kaldet der kan finde giffer:

ls('images', '_\.gif_i', false); // uden rekursion
ls('images', '_\.gif_i'); // med rekursion

og et par mere:

ls(); // find alle filer - også i alle underbiblioteker
ls('.', '', 'false'); // find alle filer i aktive dir

Håber ikke at der er flere fejl :)

--
Mvh.
/Thomas


Jacob Atzen (23-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 23-07-04 10:58

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> Her er version 2 som gerne skulle rette de fundne fejl - den
> tilføjer desuden mulighed for at slå rekursionen fra:

Jeg synes din kode er noget snørklet at gennemskue. Jeg har
refaktoreret en del på den og prøvet at lave lidt kode, der gør
noget tilsvarende på en mere læsevenlig måde. Antallet af linier er
steget en hel del, men jeg håber at læsbarheden kan retfærdiggøre det.

function acceptDir($dir) {
if($dir == '.' || $dir == '..') {
return false;
}
return true;
}

function processDir($file, $filter, $recursion) {
$files = array();
if(acceptDir($file) && $recursion) {
$files = ls($file, $filter, $recursion);
}
return $files;
}

function acceptFile($file, $filter) {
return preg_match($filter, $file);
}

function processFile($file, $filter) {
$files = array();
if (acceptFile($file, $filter)) {
$files[] = $file;
}
return $files;
}

function process($file, $filter, $recursion) {
$appendum = array();
if(is_dir($file)) {
$appendum = processDir($file, $filter, $recursion);
} else {
$appendum = processFile($file, $filter);
}
return $appendum;
}

function dirEmpty($dir) {
return (glob($dir.'/*') == false ? true : false );
}

function ls($dir = '.', $filter, $recursion = true)
{
$files = array();
if(!dirEmpty($dir)) {
foreach(glob($dir.'/*') as $file) {
$files = array_merge($files, process($file, $filter, $recursion));
}
sort($files);
}
return $files;
}

--
Med venlig hilsen
- Jacob Atzen

Thomas Lindgaard (23-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 23-07-04 13:59

On Fri, 23 Jul 2004 11:58:15 +0200, Jacob Atzen wrote:

> Jeg synes din kode er noget snørklet at gennemskue. Jeg har
> refaktoreret en del på den og prøvet at lave lidt kode, der gør
> noget tilsvarende på en mere læsevenlig måde. Antallet af linier er
> steget en hel del, men jeg håber at læsbarheden kan retfærdiggøre det.

Det må bero på en smagssag :)

Men vi kan da lave en lille krig om antallet af linier... glob() kan jo
bruges i stedet for opendir() og readdir(), så her kommer version 3:

function ls($dir = '.', $filter = '', $recursion = true)
{
$files = array();

foreach (glob("$dir/*") as $file)
{
if ( is_dir($file) && $recursion)
{
$files = array_merge($files, ls($file, $filter, $recursion));
}
else if ( !$filter || ( $filter && preg_match($filter, $file) ) )
{
$files[] = $file;
}
}
sort($files);
return $files;
}

--
Mvh.
/Thomas


Jacob Atzen (23-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 23-07-04 22:13

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> Det må bero på en smagssag :)

Jep.

> Men vi kan da lave en lille krig om antallet af linier... glob() kan jo
> bruges i stedet for opendir() og readdir(), så her kommer version 3:

Jeg bryder mig ikke om at biblioteker bliver opfattet som filer, når
$recursion er false. For mig at se, er det skidt, at man i det ene
tilfælde kan få listet biblioteker og ikke i det andet tilfælde.

Desuden vil din indledende glob returnere false, hvis det aktuelle
bibliotek er tomt og du vil få warnings.

Min pointe med mit eksempel var, at du ved at dele funktionen op i
mindre funktioner meget nemmere kan overskue, hvad de enkelte
funktioner gør.

--
Med venlig hilsen
- Jacob Atzen

Thomas Lindgaard (23-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 23-07-04 23:04

On Fri, 23 Jul 2004 23:12:39 +0200, Jacob Atzen wrote:

>> Men vi kan da lave en lille krig om antallet af linier... glob() kan jo
>> bruges i stedet for opendir() og readdir(), så her kommer version 3:
>
> Jeg bryder mig ikke om at biblioteker bliver opfattet som filer, når
> $recursion er false. For mig at se, er det skidt, at man i det ene
> tilfælde kan få listet biblioteker og ikke i det andet tilfælde.

Det er nok igen en smagssag - i Linux er alt i bund og grund filer...

> Desuden vil din indledende glob returnere false, hvis det aktuelle
> bibliotek er tomt og du vil få warnings.

Jeg må igen krybe til korset og tilstå at funktionen ikke er blevet
voldtestet :) - den er skrevet med et snævert mål for øje, hvor jeg
kontrollerer alle ydre omstændigheder.

> Min pointe med mit eksempel var, at du ved at dele funktionen op i
> mindre funktioner meget nemmere kan overskue, hvad de enkelte funktioner
> gør.

Umiddelbart har jeg ikke lettere ved at læse dit eksempel, men vi har jo
tydeligvis også forskellig kodestil :)

Man skal desuden holde sig for øje at koden kan blive _for_ pæn, idet
hvert funktionskald jo tager tid. Jeg arbejde for et par år siden med et
web-interface hvor jeg endte med at lave koden alt for slikket - alt blev
sat op med smarte funktioner som kaldte smarte funktioner, og
gennemgribende ændringer kunne laves ved at rette et enkelt sted. Men
performance-mæssigt var det noget gylle.

--
Mvh.
/Thomas


Jacob Atzen (25-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 25-07-04 10:57

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> > Jeg bryder mig ikke om at biblioteker bliver opfattet som filer, når
> > $recursion er false. For mig at se, er det skidt, at man i det ene
> > tilfælde kan få listet biblioteker og ikke i det andet tilfælde.
>
> Det er nok igen en smagssag - i Linux er alt i bund og grund filer...

Ja, men det er det ikke i mit hovede

> > Min pointe med mit eksempel var, at du ved at dele funktionen op i
> > mindre funktioner meget nemmere kan overskue, hvad de enkelte funktioner
> > gør.
>
> Umiddelbart har jeg ikke lettere ved at læse dit eksempel, men vi har jo
> tydeligvis også forskellig kodestil :)

Har du heller ikke lettere ved at læse de enkelte funktioner?

> Man skal desuden holde sig for øje at koden kan blive _for_ pæn, idet
> hvert funktionskald jo tager tid. Jeg arbejde for et par år siden med et
> web-interface hvor jeg endte med at lave koden alt for slikket - alt blev
> sat op med smarte funktioner som kaldte smarte funktioner, og
> gennemgribende ændringer kunne laves ved at rette et enkelt sted. Men
> performance-mæssigt var det noget gylle.

Premature optimization is the root of all evil
- Donald Knuth

--
Med venlig hilsen
- Jacob Atzen

Thomas Lindgaard (25-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 25-07-04 11:27

On Sun, 25 Jul 2004 11:57:17 +0200, Jacob Atzen wrote:

> Har du heller ikke lettere ved at læse de enkelte funktioner?

Hmm... jeg tror at jeg vil sige det på denne måde: Jeg kan sagtens læse
din kode og forstå hvad den gør - men det er ikke lettere for mig at
overskue den end min egen.

>> Man skal desuden holde sig for øje at koden kan blive _for_ pæn, idet
>> hvert funktionskald jo tager tid. Jeg arbejde for et par år siden med et
>> web-interface hvor jeg endte med at lave koden alt for slikket - alt blev
>> sat op med smarte funktioner som kaldte smarte funktioner, og
>> gennemgribende ændringer kunne laves ved at rette et enkelt sted. Men
>> performance-mæssigt var det noget gylle.
>
> Premature optimization is the root of all evil
> - Donald Knuth

Her mangler jeg så et godt mod-citat :) - men en hurtig søgning på dit
citat førte mig til

http://www.cookcomputing.com/blog/archives/000084.html

og herfra vil jeg da lige fremhæve en linie (Hoare's Dictum er det samme
som Donald Knuth-citatet):

I've worked on systems where the architects adhered to "Hoare's Dictum".
All goes well until realistic large-scale testing is performed and it
becomes painfully obvious that the system is never going to scale
upwards. Unfortunately by then it can be very difficult to fix the
problem without a large amount of re-design and re-coding.

--
Mvh.
/Thomas


Jacob Atzen (25-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 25-07-04 12:15

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> Hmm... jeg tror at jeg vil sige det på denne måde: Jeg kan sagtens
> læse din kode og forstå hvad den gør - men det er ikke lettere for
> mig at overskue den end min egen.

Ikke desto mindre, var der flere fejl i din oprindelige kode som
formentlig ville være undgået, hvis du havde abstraheret koden lidt
mere. Det vil jeg i alle fald tillade mig at påstå

> I've worked on systems where the architects adhered to "Hoare's
> Dictum". All goes well until realistic large-scale testing is
> performed and it becomes painfully obvious that the system is
> never going to scale upwards. Unfortunately by then it can be very
> difficult to fix the problem without a large amount of re-design
> and re-coding.

Jeg siger ikke, at man skal ignorere alle fornuftige ideer man har om,
hvordan man skriver effektive programmer til at starte med. Der er
bare alt for mange der fokuserer meget på implementationsdetaljer, der
ikke nødvendigvis giver den store performance ændring. Bare prøv at
læse lidt tilbage her i gruppen og se, hvor meget der bliver
diskuteret performance omkring mere eller mindre irrelevante ting.

Argumenter imod (premature) optimering:

- Det er ikke sikkert, at applikationen behøver optimeres. Langt de
fleste maskiner har i dag masser af overskydende CPU kraft. Hvorfor
bruge tid og energi, før man overhovedet har en ide om det er
nødvendigt.

- Det viser sig mange gange, at ubegrundet optimering har en meget
minimal indvirkning på applikationens performance, da det er næsten
umuligt, at gætte sig til, hvilke dele af koden, der er performance
kritiske. Med ubegrundet mener jeg, at man ikke har foretaget
målinger for at finde ud af, hvilke dele af koden der halter.

- Det er betydeligt nemmere, at optimere let læselig og
velstruktureret kode end det er at gøre optimeret kode let læselig
og velstruktureret.

- "Optimeret" kode har en tendens til at være noget forfærdeligt snask
at læse. Ulæsbar kode er betydeligt sværere at finde fejl og
foretage videreudvikling på.

Til slut et af mine yndlingscitater:

Rules of Optimization:
Rule no. 1: Don't do it.
Rule no. 2: Don't do it!
Rule no. 3 (for experts only): Don't do it yet.
(frit efter M.A. Jackson)

Der er flere guldkorn her:

<http://c2.com/cgi/wiki?PrematureOptimization>

--
Med venlig hilsen
- Jacob Atzen

Thomas Lindgaard (25-07-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 25-07-04 22:13

On Sun, 25 Jul 2004 13:14:37 +0200, Jacob Atzen wrote:

> Ikke desto mindre, var der flere fejl i din oprindelige kode som
> formentlig ville være undgået, hvis du havde abstraheret koden lidt
> mere. Det vil jeg i alle fald tillade mig at påstå

Hehe - den er jo svær at finde modargumenter til :)

Det eneste jeg kan finde på er, at funktionen var skrevet med en bestemt
anvendelse for øje (hvilket den klarede uden problemer), og derefter
udvidet i forbindelse med mit første indlæg i denne tråd og derefter
videregivet i utestet stand. (Dårlig undskyldning - men jeg kan altså
ikke komme på en bedre...)

> Jeg siger ikke, at man skal ignorere alle fornuftige ideer man har om,
> hvordan man skriver effektive programmer til at starte med. Der er bare
> alt for mange der fokuserer meget på implementationsdetaljer, der ikke
> nødvendigvis giver den store performance ændring.

Enig enig enig. Min løsning vil (så fremt der ikke er flere fejl) nok
være hurtigere end din, men forskellen vil slet ikke kunne mærkes i
daglig brug - med mindre man har et specielt behov for at finde filer
enormt mange gange.

[snip]

> - Det er betydeligt nemmere, at optimere let læselig og
> velstruktureret kode end det er at gøre optimeret kode let læselig
> og velstruktureret.
>
> - "Optimeret" kode har en tendens til at være noget forfærdeligt snask
> at læse. Ulæsbar kode er betydeligt sværere at finde fejl og
> foretage videreudvikling på.

Enig igen, dog med et forbehold for at man ikke skal lave koden "alt for
pæn" - du har f.eks. en funktion der hedder acceptFile som udelukkende er
en wrapper til preg_match, og den slags synes jeg at man bør undgå.
Det giver dels et ekstra funktionskald med deraf følgende
performance-forringelse, og dels opnår man i mine øjne en mere
læsevenlig kode ved simpelthen at bruge preg_match direkte og så i en
kommentar fortælle, hvad den linies kode gør godt for.

> Til slut et af mine yndlingscitater:
>
> Rules of Optimization:
> Rule no. 1: Don't do it.
> Rule no. 2: Don't do it!
> Rule no. 3 (for experts only): Don't do it yet. (frit efter M.A.
> Jackson)

Hehe.

--
Mvh.
/Thomas


Jacob Atzen (26-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 26-07-04 16:53

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> writes:

> On Sun, 25 Jul 2004 13:14:37 +0200, Jacob Atzen wrote:
>
> > Ikke desto mindre, var der flere fejl i din oprindelige kode som
> > formentlig ville være undgået, hvis du havde abstraheret koden lidt
> > mere. Det vil jeg i alle fald tillade mig at påstå
>
> Hehe - den er jo svær at finde modargumenter til :)
>
> Det eneste jeg kan finde på er, at funktionen var skrevet med en bestemt
> anvendelse for øje (hvilket den klarede uden problemer), og derefter
> udvidet i forbindelse med mit første indlæg i denne tråd og derefter
> videregivet i utestet stand. (Dårlig undskyldning - men jeg kan altså
> ikke komme på en bedre...)

Her illustrerer du så, mit argument:

> > - "Optimeret" kode har en tendens til at være noget forfærdeligt snask
> > at læse. Ulæsbar kode er betydeligt sværere at finde fejl og
> > foretage videreudvikling på.
>
> Enig igen, dog med et forbehold for at man ikke skal lave koden "alt for
> pæn" - du har f.eks. en funktion der hedder acceptFile som udelukkende er
> en wrapper til preg_match, og den slags synes jeg at man bør undgå.

Der er jeg så uenig. acceptFile() kommunikerer betydeligt klarerer end
preg_match(), hvad det er jeg gerne vil opnå. Jeg vil hellere have, at
koden forklarer sig selv, frem for at man skal skrive kommentarer ud
fra den simple regel, at koden _aldrig_ lyver.

--
Med venlig hilsen
- Jacob Atzen

Tommy Ipsen (26-07-2004)
Kommentar
Fra : Tommy Ipsen


Dato : 26-07-04 08:21

Jacob Atzen wrote:

> Hvorfor ikke bare bruge glob()?

Fordi funktionaliteten af denne funktion afhænger kraftigt af hvilken
version af php du kører samt, hvilken platform du kører det på. Jeg har
selv opgivet at bruge den for nyligt - den er mildest talt ustabil.

Mvh Tommy

Jacob Atzen (26-07-2004)
Kommentar
Fra : Jacob Atzen


Dato : 26-07-04 16:47

Tommy Ipsen <tipsen@imada.sdu.dk> writes:

> Jacob Atzen wrote:
>
> > Hvorfor ikke bare bruge glob()?
>
> Fordi funktionaliteten af denne funktion afhænger kraftigt af hvilken
> version af php du kører samt, hvilken platform du kører det på. Jeg
> har selv opgivet at bruge den for nyligt - den er mildest talt ustabil.

På hvilke platforme har du oplevet den som værende ustabil?

--
Med venlig hilsen
- Jacob Atzen

Christian Hansen (26-07-2004)
Kommentar
Fra : Christian Hansen


Dato : 26-07-04 07:10

Ronni Andersen wrote:

eller bare :

if(preg_match("/[^.]+\.gif$/i",$file))

Mvh Christian


> Hejsa!
> Jeg har følgende kode som læser i en mappe efter de aktuelle
> billeder:
>
> :::SNIP:::
> <?php
> $billeder = Array();
>
> if ($handle = @opendir('_pic/_galleri/_mig')) {
> while (false !== ($file = readdir($handle))) {
> if ($file != "." && $file != "..") {
> $billeder[] = $file;
> }
> }
> closedir($handle);
> :::/SNIP:::
>
> Jeg vil dog gerne have det sådan, at den KUN finder .gif
> billederne og altså ikke tager evt. skjulte filer og lignende
> med.
>
> Hvor skal den ekstra lille kode tilføjes?
>
> Håber hjælpen findes.
>
> vh. Rask
>


--
----------------------------------------------------------------------
Christian Hansen tlf : 98486747
Vrangbækvej 6 e-mail : chrsen@fundanemt.com
9900 Frederikshavn web : http://www.fundanemt.com/
======================================================================
Politimanden : De kørte vist over for rødt hva?
Doppler : Så har jeg sørme kørt stærkt, for det syntes
grønt!

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

Christian Hansen (26-07-2004)
Kommentar
Fra : Christian Hansen


Dato : 26-07-04 07:39

Christian Hansen wrote:

og så glemte jeg lige en lille hat :

if(preg_match("/^[^.]+\.gif$/i",$file))

> Ronni Andersen wrote:
>
> eller bare :
>
> if(preg_match("/[^.]+\.gif$/i",$file))
>
> Mvh Christian
>

Peter Brodersen (26-07-2004)
Kommentar
Fra : Peter Brodersen


Dato : 26-07-04 15:09

On Mon, 26 Jul 2004 08:39:23 +0200, Christian Hansen
<webmaster@telescopium.dk> wrote:

>og så glemte jeg lige en lille hat :
>
>if(preg_match("/^[^.]+\.gif$/i",$file))

Ingen "mit.billede.gif" ?

--
- Peter Brodersen

Ugens sprogtip: te (og ikke the)

Christian Hansen (26-07-2004)
Kommentar
Fra : Christian Hansen


Dato : 26-07-04 18:17

Peter Brodersen wrote:
> On Mon, 26 Jul 2004 08:39:23 +0200, Christian Hansen
> <webmaster@telescopium.dk> wrote:
>
>
>>og så glemte jeg lige en lille hat :
>>
>>if(preg_match("/^[^.]+\.gif$/i",$file))
>
>
> Ingen "mit.billede.gif" ?

Næ ikke i det regexp - og hvor tit optræder også det i praksis?

Men man kan da sagtens lave det, så . er tilladt i strengen. Spørgsmålet
er blot om man skal definere en tegnklasse med tilladte tegn eller
tillade alle tegn herunder mellemrum,æ ,ø og å.

Mvh Christian

Peter Brodersen (26-07-2004)
Kommentar
Fra : Peter Brodersen


Dato : 26-07-04 18:55

On Mon, 26 Jul 2004 19:16:36 +0200, Christian Hansen
<chrsen@fundanemt.com> wrote:

>Næ ikke i det regexp - og hvor tit optræder også det i praksis?

En hurtig søgning fortalte mig, at jeg har 162 .gif-billeder liggende
og 88 .jpg-billeder liggende, der har flere punktummer i filnavnet.
Flere af dem følger med diverse standardprodukter. Under alle
omstændigheder ville det være en pudsig restriktion.

>Men man kan da sagtens lave det, så . er tilladt i strengen. Spørgsmålet
>er blot om man skal definere en tegnklasse med tilladte tegn eller
>tillade alle tegn herunder mellemrum,æ ,ø og å.

Det afhænger vel af brugen. Hvis man vil finde alle filer, der slutter
på .gif, så bør alle vel inkluderes.

Hvis det handler om at referere til filerne med links eller
billede-indlejringer, så ka man jo altid fyre op under rawurlencode(),
hvis man er bekymret over mellemrum og lignende i filnavnet.

--
- Peter Brodersen

Ugens sprogtip: te (og ikke the)

Christian Hansen (26-07-2004)
Kommentar
Fra : Christian Hansen


Dato : 26-07-04 19:02

Peter Brodersen wrote:
> On Mon, 26 Jul 2004 19:16:36 +0200, Christian Hansen
> <chrsen@fundanemt.com> wrote:
> En hurtig søgning fortalte mig, at jeg har 162 .gif-billeder liggende
> og 88 .jpg-billeder liggende, der har flere punktummer i filnavnet.
> Flere af dem følger med diverse standardprodukter. Under alle
> omstændigheder ville det være en pudsig restriktion.

Nu er det jo nok fordi jeg hovedsageligt arbejder med web og har kunder,
som gør det samme og det i windows. jeg kan ikke komme i tanke om et
eneste eksempel, hvor jeg har oplevet en kunde bruge et billedefilnavn
med flere punktummer. Jeg tror det er noget, som i vid udstrækning er
begrænset til *nix-verdenen.

>
> Det afhænger vel af brugen. Hvis man vil finde alle filer, der slutter
> på .gif, så bør alle vel inkluderes.

Det er klart og så er det jo blot /\.gif$/i i stedet.


> Hvis det handler om at referere til filerne med links eller
> billede-indlejringer, så ka man jo altid fyre op under rawurlencode(),
> hvis man er bekymret over mellemrum og lignende i filnavnet.

Jep, men efter min mening er det nu meget pænere at undgå specieltegn i
ting, der skal ses på nettet.

mvh Christian

Peter Brodersen (26-07-2004)
Kommentar
Fra : Peter Brodersen


Dato : 26-07-04 20:04

On Mon, 26 Jul 2004 20:02:13 +0200, Christian Hansen
<chrsen@fundanemt.com> wrote:

>Jep, men efter min mening er det nu meget pænere at undgå specieltegn i
>ting, der skal ses på nettet.

Jeg er ikke uenig, men efterhånden er "selv" Mozilla begyndt at vise
pæne URLs i fx statuslinjen, hvis man kører musen over et
rawurlencoded link med %20 og lignende, og det samme gælder hvis man
gemmer filer fra de URLs.

Eneste er, at adressen stadigvæk står urlencoded i adresselinjen.

--
- Peter Brodersen

Ugens sprogtip: te (og ikke the)

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste