Toon posts:

[PHP] ImageMagick - geen foutboodschappen?

Pagina: 1
Acties:
  • 606 views

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Na mijn eerdere avonturen met PHP en ImageMagick ben ik nu al een beetje opgeschoten door gewoon commands door exec() heen te knallen. Ik kan het "montage" commando uitvoeren en daarmee een hele grote hoop plaatjes samenvoegen tot één groot bestand. Ik kan ook netjes "convert --version" uitvoeren en dan zie ik dat de webserver waar ik tegen aan programmeer versie 6.2.2 05/18/05 Q16 draait (dat is een beetje verouderd). Heb ik echter een fout in mijn syntax krijg ik via exec() helemaal geen foutmelding terug, dus of het goed gegaan is en zo niet waarom blijft vaag. Hoe ontdek ik of het commando wat ik uitvoer a) syntactisch klopt en b) ondersteund wordt voor de versie waar ik tegen aan programmeer?

Het probleem zit hem trouwens in de pinbarrel en cylinderize commando's.

Ik ben nog bezig om shell access te regelen voor die server, maar acht de kans klein dat het er eentje wordt met uitgebreide permissies...

[Voor 3% gewijzigd door BikkelZ op 28-09-2010 09:35]

iOS developer


  • HuHu
  • Registratie: maart 2005
  • Niet online
Je gebruikt alle drie de parameters van exec() en controleert ook de return-waarde van de functie?

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Als ik alle drie de parameters meegeef en uitlees krijg ik het volgende:

PHP:
1
2
3
4
5
6
7
8
        exec($command, $output, $report);

        if($report > 0) {
            $exceptionString = "One or more errors have occurred while executing the command '" . $command . "':";
            $exceptionString .= "\n\r" . $report;

            throw new Exception($exceptionString);
        }


Waarbij bij een goed uitgevoerd commando $report een 0 lijkt te zijn en als er iets fout gaat is hij 127.

iOS developer


  • alienfruit
  • Registratie: maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Voer de command wel correct uit?
Voorbeeldje:
code:
1
gm composite -debug "Exception" -compose atop -geometry +%s+%s %s %s %s

  • HuHu
  • Registratie: maart 2005
  • Niet online
BikkelZ schreef op dinsdag 28 september 2010 @ 09:58:
Als ik alle drie de parameters meegeef en uitlees krijg ik het volgende:

PHP:
1
2
3
4
5
6
7
8
        exec($command, $output, $report);

        if($report > 0) {
            $exceptionString = "One or more errors have occurred while executing the command '" . $command . "':";
            $exceptionString .= "\n\r" . $report;

            throw new Exception($exceptionString);
        }


Waarbij bij een goed uitgevoerd commando $report een 0 lijkt te zijn en als er iets fout gaat is hij 127.
En wat staat er dan in $output? En waarom kijk je niet naar de return-waarde?

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
PHP:
1
2
3
4
5
$return = exec($command, $output, $report);

var_dump($return);
var_dump($report);
var_dump($output);


Levert op:

string(0) ""
int(127)
array(0) {
}

Daar kan ik niet zo veel mee. Is er überhaupt ergens een lijst van de betekenissen van die return_val codes?

iOS developer


  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
alienfruit schreef op dinsdag 28 september 2010 @ 10:02:
Voer de command wel correct uit?
Voorbeeldje:
code:
1
gm composite -debug "Exception" -compose atop -geometry +%s+%s %s %s %s
Wat bedoel je precies? En is dit niet gmagick ipv imagick?

iOS developer


  • alienfruit
  • Registratie: maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Ach nagenoeg hetzelfde qua commando's... GraphicsMagick gebruik ik zelf maar dat is een fork van ImageMagick dus het zou gewoon moeten werken. Hierdoor krijg je wat gedetailleerde informatie over de fout

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Aha ik gebruik -debug "Exception" dan er bij voor de zekerheid, goede tip. Dan krijg ik die exception te zien in de output op de zelfde manier als ik de output van --version zou krijgen?

----

OK kom iets dichter bij als ik dit gebruik op een iets ander commando:

Commando:
convert -debug "Exception" -distort Barrel "0.0 0.0 0.0 1.0 0.0 0.0 0.5 1.0" /home/httpd/vhosts/bla.com/httpdocs/tmpImages/730910146-montage.png /home/httpd/vhosts/bla.com/httpdocs/tmpImages/edited_730910146-montage.png

Error:
unrecognized option `-distort'

[Voor 49% gewijzigd door BikkelZ op 28-09-2010 10:23]

iOS developer


  • MrOizo2005
  • Registratie: september 2003
  • Laatst online: 17:30
Je kan ook info terug krijgen door bv:

code:
1
convert -verbose

Also known as Oizopower | When Life Gives You Questions, Google has Answers


  • alienfruit
  • Registratie: maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Ik moet zeggen dat ik ImageMagick niet echt makkelijk vindt. Ik zit al heel de ochtend te klooien...

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
alienfruit schreef op dinsdag 28 september 2010 @ 10:25:
Ik moet zeggen dat ik ImageMagick niet echt makkelijk vindt. Ik zit al heel de ochtend te klooien...
Nee dit is inderdaad niet echt lekker. Waarschijnlijk als je weet hoe het werkt weet je het maar je wordt geen enkel stap in het proces even geholpen met een uitgebreide foutmelding die na Googlen bruikbare resultaten geeft. Dat montage commando deed het ook maar per ongeluk ineens meteen goed.

iOS developer


  • alienfruit
  • Registratie: maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Ik heb zelf ook een leuk stukje code:

PHP:
1
2
3
4
5
6
// iterate to the queued composites and execute them
foreach ( $composites as $composite ) {
    $element = $composite['element'];
    $command = sprintf( 'gm composite -debug "Exception" -compose atop -geometry +%s+%s %s %s %s', $element->x, $element->y, $composite['file'], $output, $this->filename );
    $this->executeCommand( $command );
}

  • HuHu
  • Registratie: maart 2005
  • Niet online
Doe ook eens een var_dump van $commando.

  • alienfruit
  • Registratie: maart 2003
  • Laatst online: 13:37

alienfruit

the alien you never expected

Nice, voor mij werkt het. Nu jouw problem eens verhelpen... Check mijn command queue, I like!

code:
1
2
3
4
5
6
7
8
9
string 'gm convert -verbose plaatje.jpg -crop 320x240+0+0 ./slide-1/1.png' (length=64)
string 'gm convert -verbose plaatje2.jpg -crop 100x100+0+0 ./slide-1/2.png' (length=65)
string 'gm convert -size 600x180 -background transparent -fill '#FF0000' -font @./fonts/nobile.ttf -pointsize 40 caption:'Titel' ./slide-1/3.png' (length=154)
string 'gm convert -size 600x180 -background transparent -fill '#FF0000' -font @./fonts/nobile.ttf -pointsize 40 caption:'Subtitel' ./slide-1/4.png' (length=139)
string 'gm convert -debug "Exception" -size 640x400 xc:#ffffff ./slide-1/slide_background.png' (length=85)
string 'gm composite -debug "Exception" -compose atop -geometry +0+0 ./slide-1/1.png slide_001.png slide_001.png' (length=104)
string 'gm composite -debug "Exception" -compose atop -geometry +100+100 ./slide-1/2.png slide_001.png slide_001.png' (length=108)
string 'gm composite -debug "Exception" -compose atop -geometry +20+210 ./slide-1/3.png slide_001.png slide_001.png' (length=107)
string 'gm composite -debug "Exception" -compose atop -geometry +20+210 ./slide-1/4.png slide_001.png slide_001.png' (length=107)

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Nee nog niet. Het euvel zit er bij mij in dat ik op een bepaald moment alleen een integer groter dan 0 terug krijg en geen foutmelding. Ik heb inmiddels ontdekt dat cylinderize een bash script is wat waarschijnlijk alleen maar bij de allernieuwste versies zit, als het er al standaard bij zit. Als "convert -distort" ook niet werkt bij deze versie, dan ben ik gewoon uitgepoept denk ik. Dan ga ik eens kijken of ik een nieuwere omgeving kan krijgen.
HuHu schreef op dinsdag 28 september 2010 @ 10:48:
Doe ook eens een var_dump van $commando.
Dat was dit, heb het iets geanonimiseerd:

convert -debug "Exception" -distort Barrel "0.0 0.0 0.0 1.0 0.0 0.0 0.5 1.0" /home/httpd/vhosts/bla.com/httpdocs/tmpImages/730910146-montage.png /home/httpd/vhosts/bla.com/httpdocs/tmpImages/edited_730910146-montage.png

----

Deze barrel distortion werkt wel prima onder mijn Windows XAMPP omgeving waar ik de laatste versie op heb geinstalleerd overigens, dus de syntax buiten de paden van de plaatjes zou in principe prima moeten zijn.

[Voor 46% gewijzigd door BikkelZ op 28-09-2010 11:22]

iOS developer


  • HuHu
  • Registratie: maart 2005
  • Niet online
BikkelZ schreef op dinsdag 28 september 2010 @ 11:09:

[...]


Dat was dit, heb het iets geanonimiseerd:

convert -debug "Exception" -distort Barrel "0.0 0.0 0.0 1.0 0.0 0.0 0.5 1.0" /home/httpd/vhosts/bla.com/httpdocs/tmpImages/730910146-montage.png /home/httpd/vhosts/bla.com/httpdocs/tmpImages/edited_730910146-montage.png

----

Deze barrel distortion werkt wel prima onder mijn Windows XAMPP omgeving waar ik de laatste versie op heb geinstalleerd overigens, dus de syntax buiten de paden van de plaatjes zou in principe prima moeten zijn.
Dat het op Windows werkt zegt niets. Linux gaat anders om met het escapen van speciale tekens op de command-line, zoals de ". Probeer het eens met een escapeshellarg erbij.

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Ik ga eerst even met wat ander dingen aan de slag voor ik weer op IM terug kom, kan ik met een verse server aan de slag, denk dat dat wel wat gaat schelen.

iOS developer


  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
OK de barrel distortion werkte meteen op onze nieuwe bak. Dat probleem is gefixt. Wel zit ik nog even te kloten met een Bash-script van Fred, cylinderize. Hoe roep ik die goed aan? Doe nu dit:

PHP:
1
$command = "" . $_SERVER["DOCUMENT_ROOT"] . "/cylinderize.sh -m vertical " . IMAGES_TEMP_FOLDER . $this->resultImage . " " . IMAGES_TEMP_FOLDER . "mugged_" . $this->resultImage;


Krijg foutnummer 126

iOS developer


  • Cartman!
  • Registratie: april 2000
  • Niet online
Dan zoek je even op wat dat nummer betekent. Echo de boel eens en voer het via shell uit.

Overigens... waarom zet je eerst een lege string aan het begin neer? :D

  • HuHu
  • Registratie: maart 2005
  • Niet online
Wie de neuk is Fred? Wat doet je script? Wat is het commando dat je uitvoert?

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Cartman! schreef op woensdag 29 september 2010 @ 11:18:
Dan zoek je even op wat dat nummer betekent. Echo de boel eens en voer het via shell uit.
Geen idee waar ik die nummers kan vinden....
Cartman! schreef op woensdag 29 september 2010 @ 11:18:Overigens... waarom zet je eerst een lege string aan het begin neer? :D
Tja ben aan het experimenteren met bash er voor / bash er toch niet voor, ik laat die lege string maar gewoon staan dan kan ik het sneller aanpassen;)
http://www.fmwconcepts.com/imagemagick/
Een plaatje om een cylinder heen vouwen
HuHu schreef op woensdag 29 september 2010 @ 11:27:
Wat is het commando dat je uitvoert?
Een bash script wat ImageMagick aanspreekt:

http://www.fmwconcepts.com/imagemagick/cylinderize/index.php

[Voor 34% gewijzigd door BikkelZ op 29-09-2010 11:29]

iOS developer


  • HuHu
  • Registratie: maart 2005
  • Niet online
BikkelZ schreef op woensdag 29 september 2010 @ 11:27:
[...]


Geen idee waar ik die nummers kan vinden....
Hier: http://tinyurl.com/33st86k

  • Cartman!
  • Registratie: april 2000
  • Niet online
Dan zoek je contact op met "Fred" om te vragen hoe je het moet gebruiken. Wij kennen dat script niet, simpel.

offtopic:
@HuHu: iets vriendelijker mag ook wel hoor...

  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
@Cartman: volgens mij zijn de codes die ik terug krijg totaal niet afhankelijk of ik met ome Fred, ImageMagick of je moeder aan de gang ben, maar zijn het resultaatcodes van het uitvoeren van een commando via exec. Arrogantie richting mij lijkt me dan ook totaal misplaatst als je al niet door hebt dat het een generieke code is. Huhu is misschien wel kort door de bocht maar heeft me tot nu toe wel goed op weg geholpen.
Zo ver was ik ook nog wel gekoimen, maar het is alleen geen ImageMagick meer op dit moment maar een bash script, en er bestaat bij mij een donkerbruin vermoeden dat het nummer een rijtje bitjes is en altijd precies te achterhalen moet zijn wat er aan de hand is met een shell command aan de hand van die code.

[Voor 27% gewijzigd door BikkelZ op 29-09-2010 11:59]

iOS developer


  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Ah, ik heb het script execute rechten gegeven en het volledige pad naar convert gezet in het script of iets anders per ongeluk goed gedaan, en nu krijg ik de volgende error als output:

--- FILE /pad/naar/plaatje.png NOT READABLE OR HAS ZERO SIZE ---

Plaatje staat wel degelijk op de aangegeven plek dus mijn vermoeden is dat het een rechten issue is. Ik pruts weer even verder.

Ik vraag me nog steeds af of er ergens een overzicht is te vinden van die result codes....

iOS developer


  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Plaatje wordt netjes gegenereerd als ik via de shell het exacte commando kopieer. Misschien eens kijken of ik via een andere user exec() kan uitvoeren.

iOS developer


  • BikkelZ
  • Registratie: januari 2000
  • Laatst online: 22-08 18:33
Het script bevat foutievelijk twee keer een declaratie voor de variabele 'dir', welke er voor zorgt waar je je tijdelijke bestanden wegschrijft. Heb hem nu aangepast en hij doet het. Ik moet de dir veranderen van . naar /tmp. De shell user mocht wel op beide locaties schrijven, vandaar dat het via de shell wel lukte.

[Voor 17% gewijzigd door BikkelZ op 29-09-2010 15:05]

iOS developer


  • MueR
  • Registratie: januari 2004
  • Laatst online: 22:40

MueR

Moderator Devschuur®

is niet lief

Goed, vierdubbelposten en tussendoor nog op de man spelen. Je bent nu al genoeg op het Het algemeen beleid gewezen, dat begint ook langzaam de keel uit te hangen. Ik ben klaar met dit topic.

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!

Pagina: 1

Dit topic is gesloten.



Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee