/ 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
galleri
Fra : Erik Ginnerskov


Dato : 28-12-09 18:19

I en mappe på min hjemmeside kører jeg et script, der scanner mappen for
forekomster af .jpg-filer og udskriver som en billedoversigt:

<?php
foreach (glob("*.jpg") as $filename) {
?>
<div><img src="<?= $filename;?>" alt="" /><br /><p
style='text-align:center'><?=$filename?></p></div>
<?php
echo "\r\n";
}
?>

Scriptet fungerer for så vidt upåklageligt, men jeg har fået den ide at
indsætte en række små tekstfiler med samme filnavn som billederne. formålet
var at kunne vise en tekst under billedet i stedet for blot filnavnet på
billedet. Jeg forsøgte dette:

<?php
foreach (glob("*.jpg") as $filename.jpg) {
?>
<div><img src="<?= $filename.jpg;?>" alt="" /><br /><p
style='text-align:center'><?=$filename.txt?></p></div>
<?php
echo "\r\n";
}
?>


.... men scriptet brokker sig over forekomsten af et punktum i variablen i
første linje. Det nytter heller ikke at escape punktummet - så er der bare
brok over det i stedet.

Hvordan får jeg parret .jpg-filnavnene med de tilsvarende .txt-filnavne, så
jeg bare kan smide et nyt billede med tilhørende tekstfil i mappen og
automatisk få vist det på siden?

--
Med venlig hilsen
Erik Ginnerskov
http://ginnerskov.dk - http://html-faq.dk



 
 
Anders Wegge Keller (28-12-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 28-12-09 18:23

"Erik Ginnerskov" <erik.ginnerskov@live.dk> writes:

...

> Hvordan får jeg parret .jpg-filnavnene med de tilsvarende
> .txt-filnavne, så jeg bare kan smide et nyt billede med tilhørende
> tekstfil i mappen og automatisk få vist det på siden?

Noget preg_replace() måske?

$txtname = preg_replace("\.jpg", "\.txt", $filename);

Utestet, så jeg forbeholder mig ret til at have kaget rundt i
rækkefølgen i kaldet.

--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Erik Ginnerskov (28-12-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 28-12-09 18:40

Anders Wegge Keller wrote:

>> Hvordan får jeg parret .jpg-filnavnene med de tilsvarende
>> .txt-filnavne, så jeg bare kan smide et nyt billede med tilhørende
>> tekstfil i mappen og automatisk få vist det på siden?
>
> Noget preg_replace() måske?
>
> $txtname = preg_replace("\.jpg", "\.txt", $filename);
>
> Utestet, så jeg forbeholder mig ret til at have kaget rundt i
> rækkefølgen i kaldet.

Jeg prøvede først at sætte den linje øverst i scriptet, det giver følgende
fejl

Notice: Undefined variable: filename
Warning: Delimiter must not be alphanumeric or backslash

....med henvisning til den indsatte kode linje. Flyttede så linjen en linje
ned i scriptet og opnår derved, at Notice-linjen forsvinder. Til gengæld
udskrives Warning-linjen nu for hvert billede.

Det skal siges, at jeg selvfølgelig har ændret variabelnavnet sidst i
scriptet, så det passer med $txtname.

--
Med venlig hilsen
Erik Ginnerskov
http://ginnerskov.dk - http://html-faq.dk



Anders Wegge Keller (28-12-2009)
Kommentar
Fra : Anders Wegge Keller


Dato : 28-12-09 18:52

"Erik Ginnerskov" <erik.ginnerskov@live.dk> writes:

> Anders Wegge Keller wrote:
>
>>> Hvordan får jeg parret .jpg-filnavnene med de tilsvarende
>>> .txt-filnavne, så jeg bare kan smide et nyt billede med tilhørende
>>> tekstfil i mappen og automatisk få vist det på siden?
>>
>> Noget preg_replace() måske?
>>
>> $txtname = preg_replace("\.jpg", "\.txt", $filename);
>>
>> Utestet, så jeg forbeholder mig ret til at have kaget rundt i
>> rækkefølgen i kaldet.
>
> Jeg prøvede først at sætte den linje øverst i scriptet, det giver følgende
> fejl
>
> Notice: Undefined variable: filename
> Warning: Delimiter must not be alphanumeric or backslash
>
> ...med henvisning til den indsatte kode linje. Flyttede så linjen en linje
> ned i scriptet og opnår derved, at Notice-linjen forsvinder. Til gengæld
> udskrives Warning-linjen nu for hvert billede.

Der skal / udenom den streng der skal erstattes, og derudover skal
"." i replacement ikke escapes. For at undgå flere fejlskud lavede jeg
en lynhurtig test:

$filename = "foo.jpg";
$txtname = preg_replace("/\.jpg/", ".txt", $filename);
echo $txtname;

Den giver det forventede resultat: foo.txt

--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*

Bertel Lund Hansen (28-12-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-12-09 19:05

Anders Wegge Keller skrev:

> $txtname = preg_replace("/\.jpg/", ".txt", $filename);

Preg_replace() er tidskrævende og unødvendig i det her tilfælde.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Bertel Lund Hansen (28-12-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-12-09 18:55

Erik Ginnerskov skrev:

> <?php
> foreach (glob("*.jpg") as $filename) {
> ?>
> <div><img src="<?= $filename;?>" alt="" /><br /><p
> style='text-align:center'><?=$filename?></p></div>
> <?php
> echo "\r\n";
> }
> ?>

Jeg ville skrive det samme sådan her:

<?php
foreach (glob("*.jpg") as $filename)
   echo "<div><img src='$filename' alt="" />
   <p style='text-align:center'>$filename</p></div>
   ";
?>

> Scriptet fungerer for så vidt upåklageligt, men jeg har fået den ide at
> indsætte en række små tekstfiler med samme filnavn som billederne. formålet
> var at kunne vise en tekst under billedet i stedet for blot filnavnet på
> billedet. Jeg forsøgte dette:

> <?php
> foreach (glob("*.jpg") as $filename.jpg)

Det er helt forkert syntaks. Prøv dette:

<?php
foreach (glob("*.jpg") as $filename) {
   $textname=str_replace('.jpg','.txt',$filename);
   echo "<div><img src='$filename' alt="" />
   <p style='text-align:center'>$textname</p></div>
   ";
}
?>

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Birger Sørensen (28-12-2009)
Kommentar
Fra : Birger Sørensen


Dato : 28-12-09 19:22

Erik Ginnerskov skrev:
> I en mappe på min hjemmeside kører jeg et script, der scanner mappen for
> forekomster af .jpg-filer og udskriver som en billedoversigt:
>
> <?php
> foreach (glob("*.jpg") as $filename) {
> ?>
> <div><img src="<?= $filename;?>" alt="" /><br /><p
> style='text-align:center'><?=$filename?></p></div>
> <?php
> echo "\r\n";
> }
> ?>
>
> Scriptet fungerer for så vidt upåklageligt, men jeg har fået den ide at
> indsætte en række små tekstfiler med samme filnavn som billederne. formålet
> var at kunne vise en tekst under billedet i stedet for blot filnavnet på
> billedet. Jeg forsøgte dette:
>
> <?php
> foreach (glob("*.jpg") as $filename.jpg) {
> ?>
> <div><img src="<?= $filename.jpg;?>" alt="" /><br /><p
> style='text-align:center'><?=$filename.txt?></p></div>
> <?php
> echo "\r\n";
> }
> ?>
>
>
> ... men scriptet brokker sig over forekomsten af et punktum i variablen i
> første linje. Det nytter heller ikke at escape punktummet - så er der bare
> brok over det i stedet.
>
> Hvordan får jeg parret .jpg-filnavnene med de tilsvarende .txt-filnavne, så
> jeg bare kan smide et nyt billede med tilhørende tekstfil i mappen og
> automatisk få vist det på siden?

Du skal vel også enten læse txt-filen ind, eller include den, i stedet
for blot at give den et navn?
Hvis billedet hedder billede.jpg, kan du så bare kalde txt-filen
billede.jpg.txt
Endelig bør du vel teste for eksistensen af txt-filen, inden du
udskriver den?

<?php
foreach (glob("*.jpg") as $filename.jpg) {
?>
<div><img src="<?= $filename.jpg;?>" alt="" /><br />
<?php
if ( isfile( $filename.".txt")) {
echo "<p style='text-align:center'>";
include $filename.".txt";
echo "</p></div>\r\n";
}
}
?>

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Erik Ginnerskov (28-12-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 28-12-09 19:59

Birger Sørensen wrote:

> Du skal vel også enten læse txt-filen ind, eller include den, i stedet
> for blot at give den et navn?
> Hvis billedet hedder billede.jpg, kan du så bare kalde txt-filen
> billede.jpg.txt

Har jeg så prøvet:

<?php
foreach (glob("*.jpg") as $filename) {
?>
<div><img src="<?= $filename;?>" alt="" /><br /><p
style='text-align:center'><?php include $filename.".txt"; ?></p></div>
<?php
echo "\r\n";
}
?>

Så funker det. Tak til Anders, Bertel og Birger.

--
Med venlig hilsen
Erik Ginnerskov
http://ginnerskov.dk - http://html-faq.dk



Martin (29-12-2009)
Kommentar
Fra : Martin


Dato : 29-12-09 11:33

On 28-12-2009 18:19, Erik Ginnerskov wrote:
> <?php
> foreach (glob("*.jpg") as $filename.jpg) {

Man kan ikke have variabler med . i PHP
foreach (glob("*.jpg") as $filename) {
// $filename indeholder nu fx. "billede.jpg"

> ?>
> <div><img src="<?= $filename.jpg;?>" alt="" /><br /><p

Ændres til
<?= $filename;?>

> style='text-align:center'><?=$filename.txt?></p></div>

Hvis dine tekstfiler hedder

billede.jpg.txt så skal du ændre
.... <?=$filename;?>.txt</p> ...

Hvis tekstfilerne hedder
billede.txt

Så kan du skrive
<?=implode('.', array_pop(explode('.', $filename)));?>.txt

// Lidt nemmere at læse
// Tager alle punktummer og splitter på dem
$filearray = explode('.', $filename);
// Fjerner den sidste array value, hvilket vil være extensionen
array_pop($filearray);
// Samler hele dynen igen
$filename = implode('.', $filearray);


> <?php
> echo "\r\n";
> }
> ?>


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

Månedens bedste
Årets bedste
Sidste års bedste