Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

galleri

0 views
Skip to first unread message

Erik Ginnerskov

unread,
Dec 28, 2009, 12:19:03 PM12/28/09
to
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

unread,
Dec 28, 2009, 12:22:44 PM12/28/09
to
"Erik Ginnerskov" <erik.gi...@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

unread,
Dec 28, 2009, 12:40:18 PM12/28/09
to
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.

Anders Wegge Keller

unread,
Dec 28, 2009, 12:51:58 PM12/28/09
to
"Erik Ginnerskov" <erik.gi...@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

Bertel Lund Hansen

unread,
Dec 28, 2009, 12:54:38 PM12/28/09
to
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/

Erik Ginnerskov

unread,
Dec 28, 2009, 1:02:55 PM12/28/09
to
Anders Wegge Keller wrote:

> 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

OK, nu ser scriptet s�dan ud:

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

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

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

style='text-align:center'><?php echo $txtname?></p></div>


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

Resultatet er, at der under hvert billede bliver udskrevet navnet p� den
tilsvarende tekstfil - ikke indholdet af den. Det var det sidste, jeg gerne
ville opn�.

Bertel Lund Hansen

unread,
Dec 28, 2009, 1:05:02 PM12/28/09
to
Anders Wegge Keller skrev:

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

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

Birger Sørensen

unread,
Dec 28, 2009, 1:21:33 PM12/28/09
to
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

unread,
Dec 28, 2009, 1:58:33 PM12/28/09
to
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.

Martin

unread,
Dec 29, 2009, 5:32:37 AM12/29/09
to
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);

0 new messages