Toon posts:

[php] Ervaring met imagemagick?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Waarom werkt het volgende bij mij niet?


PHP:
1
2
3
4
$path = "c:\\webroot";
$bestand_name="henk.jpg";
copy($HTTP_POST_FILES['bestand']['tmp_name'], "$path\\$bestand_name");
exec("convert -size 120 x 120 $path\\$bestand_name -resize 120 x 120 $path\\$bestand_name", $ret_val);


Ik krijg verder geen foutmelding in de browser en het plaatje wordt ook prima naar de nieuwe locatie gekopieerd.

Wanneer ik de imagemagick functie gewoon als commando op de server uitvoer werkt het prima. Iemand een suggestie? Het is waarschijnlijk iets kleins maar ik zie het niet. Het enige wat hij dus niet doet is het correct uitvoeren van de imagemagick functie.

Ik krijg echter wel een $ret_val.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Het werkt niet.....
Sorry hoor, maar glazen bollen maken ze allang niet meer. Een beetje specifieker zijn dus.

Als je nu ook eens die return waarde die je terugkrijgt gaat gaan opzoeken en kijken wat de betekenis ervan is, dan zul je imo ook al een heel stuk verder komen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
de returnwaarde is een array.

Verwijderd

string exec ( string command [, array output [, int return_var]])


exec() executes the given command, however it does not output anything. It simply returns the last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

If the array argument is present, then the specified array will be filled with every line of output from the command. Note that if the array already contains some elements, exec() will append to the end of the array. If you do not want the function to append elements, call unset() on the array before passing it to exec().

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Tja, lijkt me duidelijk.....

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het is mij in ieder geval niet helemaal duidelijk. Wat is er mis aan deze regel?

exec("convert -size 120 x 120 $path\\$bestand_name -resize 120 x 120 $path\\$bestand_name", $ret_val);

Zou goed moeten zijn. Kopieren doet hij ook netjes en ik krijg ook geen foutmelding. En aangezien ik geen meldingen krijg van de convert opdracht staat er in het array ook niks.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 21:52

RM-rf

1 2 3 4 5 7 6 8 9

moet je $path niet "C:\\\\webroot" zijn, of je iig je $path tussentijds addslashen?

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

Topicstarter
dat is eindelijk een goeie. Ja ik vermoed dat het daar inderdaad verkeerd gaat ergens. Ik heb magic qoutes aanstaan en weet nu niet precies of hij die slashes er nu inlaat of uithaalt.

Verwijderd

Topicstarter
Ik maak gebruik van magic quotes en dit commando werkt in de prompt:

convert -size 120 x 120 c:\webroot\henk.jpg -resize 120 x 120 c:\webroot\henk.jpg

en
echo $path\\$bestand;

= c:\webroot\henk.jpg

Hoe moet ik het nu in die exec functie zetten zodat hij de goede slashes houdt? Ik heb al verscheidene dingen geprobeerd.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 21:52

RM-rf

1 2 3 4 5 7 6 8 9

ik heb hier niet de beschikking over een windows-pc en voor *nix is juist de path-stuctuur net wat anders; betwijfel echter of echo $path\\$bestand; werkt is het niet beter om echo $path."\\".$bestand te doen, of eerder om je path gewoon al inclusief de afsluitende slash te gebruiken: dus $path = "C://webroot//"


ik denk echter dat de fout hier niet in lag:

als ik je command bekijk zit er vreemde opzet in:
code:
1
convert [ options ... ] input_file output_file
terwijl jij convert [ options ... ] input_file [ options ... ] output_file lijkt te doen
verder -size zou je moeten gebruiken voor het tilen van een afbeelding; dus het herhalen van een structuur terwijl resize juist voor vergroten/verkleinen bedoeld is.

als laatste, je bouwt de functie enkel voor .jpg, beter is een eerder generieke functie te bouwen en mogelijk bij je accept dit dan te beperken tot enkel .jpeg's (via fileupload_type)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

Topicstarter
Beste RM-rf, bedankt voor je opmerkingen.

Het is een beetje vaag: zelfs als ik:
exec("mogrify -gamma 100 c:\\webroot\\henk.jpg , $ret_val); doe gaat het niet goed.

Ik maak de functie uiteindelijk ook voor meerder bestandsformaten dmv een variabele, maar zolang dit nog niet werkt kan ik daar niet aan beginnen.
Heb je enig idee wat magic quotes doet met de string die ik meegeef aan exec()?

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 21:52

RM-rf

1 2 3 4 5 7 6 8 9

als ik exec gebruik dien ik altijd de complete path naar mn bin te geven:
dus '/usr/local/bin/';
misschien moet je op windows ook een soortgelijk path ingeven? iets als C:/PROGRAM~/convert

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

Topicstarter
hoeft in dit geval niet, aangezien ik de imagemagick map in mijn windows path heb gezet en hij hem dus overal vindt.

exec("mogrify -gamma 100 c:/webroot/pasfoto.jpg", $retval); werkt helaas ook niet.

PHP draait ook niet in safe-mode dus daar kan het ook niet aan liggen :(

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 21:52

RM-rf

1 2 3 4 5 7 6 8 9

Verwijderd schreef op 04 september 2002 @ 15:25:
hoeft in dit geval niet, aangezien ik de imagemagick map in mijn windows path heb gezet en hij hem dus overal vindt.

exec("mogrify -gamma 100 c:/webroot/pasfoto.jpg", $retval); werkt helaas ook niet.

PHP draait ook niet in safe-mode dus daar kan het ook niet aan liggen :(
in mijn geval overigens niet (safe_mode ook off) ook al staat /usr/bin standaard in mn path

verder staat op php.net wat over exec; dat die op windows geen directe/echte shell simuleert; meeste voorbeelden op windows gebruiken:
code:
1
exec("cmd /c command -options")

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

Topicstarter
Ik weet het al, ik had in mijn path een "&" teken zitten en daar stoekte hij op.
Weet iemand hoe ik dit in de phpcode kan omzeilen?
dus bijvoorbeeld:

exec("mogrify -gamma 100 c:/web&root/pasfoto.jpg", $retval);

Kan ik dit met een speciale code zo houden?
Pagina: 1