[PHP] unlink delete file met '&' niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De titel zegt het al.

Als ik met php de unlink functie gebruik (ik weet niet meer waarom, eerst
deed ik system'+rm) werkt dat prima. De file wordt netjes verwijderd.

Echter, als een filename een & of iets dergelijks bevat klopt de filename uit
de database niet met wat Linux wil horen. Bv, "B&W" in de database moet
"B/&W" worden om te kunnen deleten.

Ondanks alle urlencode, htmlentities en weet ik veel wat voor dingen ik nog
meer geprobeerd heb krijg ik het niet voor elkaar de string zo te manipuleren
dat ik files met speciale tekens kan verwijderen.

Iemand een oplossing?

svp geen oplossingen met: 'noem je files dan anders' ofzo, ze hebben
nu eenmaal rare tekens erin zitten soms.

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

str_replace? preg_replace? ereg_replace?

een str_replace('&','\\&',$bestandsnaam); is gauw gedaan

[ Voor 77% gewijzigd door RSpliet op 18-08-2004 14:17 ]

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Wellicht de makkelijkste oplossing is terug naar je eerdere oplossing:

$command = 'rm '.$filename;
`$command`;

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

En escapen al geprobeerd?

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

sjroorda schreef op 18 augustus 2004 @ 14:13:
Wellicht de makkelijkste oplossing is terug naar je eerdere oplossing:

$command = 'rm '.$filename;
`$command`;
Dat zal niet op Windows machines gaan werken denk. stel DAT je script n keer op een Windows bak word gedraait.

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ehm, sorry jongens, maar kunnen jullie misschien ook een voorbeeld geven
hoe ik de door jullie voorgestelde functies moet gebruiken? ik ben echt niet
goed in php namelijk.

óf de string moet veranderd worden, óf er bestaat een functie die ik niet kan
vinden die strings kan converteren naar Unix-taal.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
S3v3n_0f_n1n3 schreef op 18 augustus 2004 @ 14:13:
str_replace? preg_replace? ereg_replace?

een str_replace('&','\\&',$bestandsnaam); is gauw gedaan
Ja, maar er zijn meer speciale tekens en ik ga niet hele rijen str_replace maken
voor alle mogelijkheden.
sjroorda schreef op 18 augustus 2004 @ 14:13:
Wellicht de makkelijkste oplossing is terug naar je eerdere oplossing:

$command = 'rm '.$filename;
`$command`;
rm werkte wel, maar zat ook met het &-probleem.

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

Verwijderd schreef op 18 augustus 2004 @ 14:36:
[...]

Ja, maar er zijn meer speciale tekens en ik ga niet hele rijen str_replace maken
voor alle mogelijkheden.
Dan gebruik je preg_replace met een array?
PHP:
1
2
3
4
5
6
7
8
9
$oud = array(
'/&/',
'/ /' // en voeg eventueel meer toe
);
$nieuw = array(
'\\&',
'\\ ' // dan ook hier meer toevoegen
);
preg_replace($oud,$nieuw,$bestandsnaam);


Iets meer in de materie verdiepen mag wel hoor. Dit is nog heel basic. Werkt addslashes(); trouwens niet gewoon?

[ Voor 82% gewijzigd door RSpliet op 18-08-2004 14:46 ]

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Addslashes zet geen \ voor een &. :)

En waarom zou je preg_replace() gebruiken? Dit kan met precies dezelfde syntax veel sneller met str_replace();

'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.


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 12:57

Robtimus

me Robtimus no like you

Probeer anders de filenaam tussen "" te zetten, dat werkt op mijn linux bak gewoon, ook met &.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
<? preg_replace('#[^a-z0-9_\-\.]#i', '_', $filename; ?>
hiermee vervang je alle vreemde tekens door een _ misschien handig in dit geval ;)

Acties:
  • 0 Henk 'm!

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 08-09 21:45

RSpliet

*blink*

Verwijderd schreef op 18 augustus 2004 @ 19:14:
code:
1
<? preg_replace('#[^a-z0-9_\-\.]#i', '_', $filename; ?>
hiermee vervang je alle vreemde tekens door een _ misschien handig in dit geval ;)
Lijkt me niet, dat pikken de Linux FS's ook niet nl ;)

Schaadt het niet, dan baat het niet


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

PHP:
1
$filename = preg_replace('/([$.&-])/', '\\\$1', $filename);

naar believen de characterclass uitbreiden ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Verwijderd schreef op 18 augustus 2004 @ 14:36:rm werkte wel, maar zat ook met het &-probleem.
Zet de bestandsnaam eens tussen dubbele quotes; dat zou wel moeten werken? Maar idd, je zit dan zoals S3v3n_0f_n1n3 al zegt met incompatibiliteit wanneer je script op een ander OS draait.

... zegt IceManX ook al... (wijze les: eerst lezen, dan posten ;))

[ Voor 10% gewijzigd door sjroorda op 18-08-2004 21:17 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
PHP Manual:
escapeshellarg
(PHP 4 >= 4.0.3, PHP 5)

escapeshellarg -- voeg quotes toe aan een string sodat die als shell parameter gebruikt kan worden
Beschrijving
string escapeshellarg ( string arg)


escapeshellarg() voegt enkele quotes toe aan een string en quotes al aanwezige enkele quotes zodat de string rechtstreeks aan een shell functie kan worden gegeven op een veilige manier. Deze functie dient ervoor om per parameter de string geschikt te maken nadat deze is ingevoerd door een gebruiker

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Allemaal mooie oplossingen, maar ik geloof dus niet dat php zóó brak is dat je het argument aan unlink() zou moeten escapen.

En een snel testje lijkt dat te bevestigen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
$ ls -l
-rw-r--r--  1 mh users  0 Aug 19 01:41 Is php echt zo suf & brak?!?
-rwxr-xr-x  1 mh users 69 Aug 19 01:40 unlink.php
$ cat unlink.php
#!/usr/bin/env php
<?php
        unlink( 'Is php echt zo suf & brak?!?')
?>
$ ./unlink.php
$ ls -l
-rwxr-xr-x  1 mh users 69 Aug 19 01:40 unlink.php
$


Misschien zit er iets anders fout in de scripts van de TS.

"He took a duck in the face at two hundred and fifty knots."


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

_Squatt_ schreef op 19 augustus 2004 @ 01:42:
Misschien zit er iets anders fout in de scripts van de TS.
Of er is sprake van een andere PHP versie. ;)

'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