[PHP] renamen met variabelen gaat fout

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben wat aan het uitproberen om via een script mijn digicamfoto's wat makkelijker te renamen. Ik heb namelijk een cam die alleen filenames DSC*****.JPG uitspuugt, en als je een paar keer achter elkaar je cam leegt wordt het al gauw een zooitje op je schijf, en weet je niet meer wat bij wat hoort.

Vandaar dat ik middels wat hieronder staat (is mijn eerste kennismaking met PHP overigens) een zelf samen te stellen filename wil genereren a.d.h.v. EXIF data die middels een ander script uitgelezen worden.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
include('readexif.php');
extract($_GET); 
$verbose = 0;
$result = read_exif_data_raw($path,$verbose);   

print_r ($result); 
$date = ($result[IFD0][DateTime]);
$width = ($result[SubIFD][ExifImageWidth]);
$height = ($result[SubIFD][ExifImageHeight]);
$resolution = str_replace (" pixels", "x", $width).str_replace (" pixels", "", $height);
$filename = $resolution.$date;
$filename = str_replace (":", "_", $filename);
$filename = str_replace (" ", "", $filename);
$filename = $filename.".jpg";
//Zo gaat ie worden:
echo $filename;

// Renamen
rename($path, $filename);

Wat er dus fout gaat is het volgende : als ik
PHP:
1
$filename = $resolution.$date;
doe, dan wordt het bestand gerenamed als
code:
1
1600x12002003_05_0209_36_14
en als ik
PHP:
1
$filename = $resolution;
bijvoorbeeld doe, dan wordt het bestand
code:
1
1600x1200.jpg
genoemd :?
Dus als ik $date erachter hang, wordt de extensie niet meer meegenomen :?
/me is confused.

Wie snapt dit en kan dit verklaren ?

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Waarschijnlijk is deze regel weggevallen:
PHP:
1
$filename = $filename.".jpg";
want als ik dit uitvoer:

PHP:
1
2
3
4
5
6
7
8
$resolution = "1600x1200"; 
$date = "2003_05_0209_36_14";
$filename = $resolution.$date; 
$filename = str_replace (":", "_", $filename); 
$filename = str_replace (" ", "", $filename); 
$filename = $filename.".jpg"; 
//Zo gaat ie worden: 
echo $filename;
krijg ik netjes:
1600x12002003_05_0209_36_14.jpg

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik zal het je nog sterker vertellen : ik doe vlak voor de rename ook nog even een echo van $filename en die bevat ook gewoon de .jpg erachter. Het moet dus wel het renamen zijn wat fout gaat. :?

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Wat gebeurt er als je met een php een willekeurig bestand wilt renamen?
PHP:
1
rename('DSC00001.JPG', '1600x12002003_05_0209_36_14.jpg');

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Doe eens gewoon: $filename.=".jpg"; Onzin. Ik kijk ff verder. :)

Probeer in ieder geval te renamen met het pad, dus:
PHP:
1
rename($path.$oldfilename,$path.$newfilename);

[ Voor 102% gewijzigd door RedRose op 06-10-2003 23:08 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bigtree schreef op 06 October 2003 @ 22:06:
Wat gebeurt er als je met een php een willekeurig bestand wilt renamen?
PHP:
1
rename('DSC00001.JPG', '1600x12002003_05_0209_36_14.jpg');
dit gaat wel goed. ik snap er nog steeds niets van...

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Zit er niet toevallig een enter in die date string?
Echo anders die date eens met een char ervoor en erna:
echo "x".$date."x"

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

hmm

je stelt nu de date enzow in met = " " ....
probeer het eens neer te zetten met = ' '

(zo roep je namelijk ook als je zelf iets invult aan)

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
justmental schreef op 07 October 2003 @ 20:49:
Zit er niet toevallig een enter in die date string?
Echo anders die date eens met een char ervoor en erna:
echo "x".$date."x"
en bekijk dan vooral de *bron* van je output, of gebruik nl2br

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben eruit. Het was geen enter, maar een ander, onzichtbaar teken denk ik :?
De gegevens worden uit een array gehaald, maakt dat uit ? Ik heb het idee dat het laatste character (in dit geval althans) zo'n teken is dus. :)

De oplossing was dan ook (tot nu toe :P)
PHP:
1
$filename = preg_replace('([^_a-zA-Z0-9\@\-\.])', '', $filename);

Alleen deze is geschikt voor valid emailadressen zoals je kunt zien. Als iemand nog een hint heeft voor valid filenames dan verneem ik nog graag even. :P

Bedankt voor het meedenken !

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik zou dan gewoon het laatste teken eraf knippen, met zo'n regex voeg je onnodig complexiteit toe.

Who is John Galt?

Pagina: 1