Hallo,

ik heb het volgend probleem op mijn nieuwe server, draaiend op 5.3. (i now...)

Op de ene server werkt het, waar de andere weigert... :

namelijk, ik heb een function() met daarin een een Imagemagick execution

iets als

<?php

$res = upload_multiple_file(aaaaa, bbbb);
echo $res;

function upload_multiple_file($file,$file_dir) {

$make_magic = system("/usr/bin/convert -resize 1600x1600\> $foto1 $foto2", $retval31);
...
}

het probleem is dat de system() niet wil werken binnen deze functie, erbuiten wel. Dit werkt op meerdere servers, maar die ene..noppes.
Herkent er iemand dit, dien ik ergens op te letten ? Heb al grondig de php.ini's bekeken, maar vind het niet...

Alvast bedankt !!
Waar komt $retval31 vandaan?

Zet dit eens bovenin je script:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
ik denk dat $foto1 en $foto2 nog ernstiger zijn.

$retval zal van system een returnvalue gaan ontvangen. Is een wat on-php-ige manier van vullen van variabelen.

Mogelijk moeten $foto1 en 2 $file1 en 2 zijn?
@Ivo: Mijn fout. Je hebt helemaal gelijk, ook wat die varnamen betreft.
If in doubt, consult the manual.

De aanroept lijkt syntactisch correct, $retval31 is een call-by-reference variabele die de return status van het uitgevoerde commando teruggeeft.

@Cristobal: begrijp je wat hier gebeurt? Je roept met PHP een extern programma aan. Ik weet niet op wat voor omgevingen jouw websites actief zijn, maar het lijkt erop dat het pad /usr/bin/convert niet (meer) beschikbaar is op de nieuwe omgeving OF dat je webhost het uitvoeren van externe programma's niet toestaat OF dat /usr/bin/convert niet executable is of een combinatie van alle voorgaande punten.

EDIT: en ja, waar komen die variabelen vandaan, maar mogelijk was er meer code verwijderd uit dit fragment. Aangezien dit voorheen blijkbaar wel werkte.
bedankt voor de snelle reactie's !

Het is opgelost ondertussen > Het klopt dat m'n code deels gepost was hier...
Ik schrijf en lees met de variabelen $foto1, $foto2. waarvan ik het path hier niet gezet had. Die $retval is in principe om nog geen output te generen (> /dev/null 2>&1)
MAAR in m'n scripts heb ik ook het path naar m'n Imagemagick in een var,
namelijk
<?php
$make_magic = system("$usr
?>
<?php
$make_magic = system("/usr/bin/convert
?>
dit omdat het path verschillend is op meerdere systemen /usr/bin/local/convert OF /usr/bin/convert OF/opt/bin/local/ ...
dus steek ik dit in mijn config settings.

MAAR dit werkt dus niet binnenin een function(), anders wel. Dus moet ik hier het path voluit gaan tikken voor dit script, en dan niet vergeten te wijzigen bij migratie naar een ander systeem. Heel vreemd dus...

Bij nader inzien blijkt dit zo ook te zijn op alle andere servers.
Deels opgelost dus, met een tweak. Maar weet nog steeds niet waarom het path via die var niet werkt in een function.... Zou ik graag weten, daar ik bezig ben met een app met vele classen etc. waarin Imagemagick vele taken zal uitvoeren.

Anyway, ben nieuw hier ;-)


Dat heet de scope van variabelen

een var die globaal bestaat, bestaat niet in het wereldje binnen de functie.

Handigste lijkt me, om de config te regelen met constanten:

<?php

const PATH_CONVERT = '/usr/local/bin/convert';

?>

Reageren