system() binnen een function()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cristobal Langendos

Cristobal Langendos

23/03/2016 13:41:41
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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 [b]binnen[/b] deze functie, [b]erbuiten[/b] 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 !!
 
PHP hulp

PHP hulp

23/11/2024 06:25:24
 
- SanThe -

- SanThe -

23/03/2016 13:46:29
Quote Anchor link
Waar komt $retval31 vandaan?

Zet dit eens bovenin je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
 
Ivo P

Ivo P

23/03/2016 14:21:27
Quote Anchor link
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?
 
- SanThe -

- SanThe -

23/03/2016 14:24:58
Quote Anchor link
@Ivo: Mijn fout. Je hebt helemaal gelijk, ook wat die varnamen betreft.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/03/2016 15:17:33
Quote Anchor link
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.
Gewijzigd op 23/03/2016 15:19:18 door Thomas van den Heuvel
 
Cristobal Langendos

Cristobal Langendos

23/03/2016 17:06:36
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$make_magic
  = system("$usr
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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 ;-)
 
Ivo P

Ivo P

23/03/2016 17:31:36
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

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

?>
 
Cristobal Langendos

Cristobal Langendos

23/03/2016 17:41:05
Quote Anchor link
> Ivo,

dit zal het inderdaad zijn !!!

thx
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.