Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    5

    Passaggio dati da programma C a PHP?

    Ciao a tutti! Vi spiego subito il mio problema: ho la necessità di avere del codice php, dentro la mia pagina web, che lancia un programma C sulla macchina sulla quale gira il server. Questo programma in C deve restituire al PHP dei valori numerici (dati raccolti). La prima cosa che ho provato è stata quella di chiamare il programma C con la exec() e da esso ritornare il dato richiesto, ma con scarsi successi. Qualcuno mi ha consigliato di provare con un JSON, altri tramite semplici file. Consigli? Grazie!

  2. #2
    ciao!

    con exec() / shell_exec() che problemi hai riscontrato?

    cmq anche la soluzione json potrebbe non essere male.
    costruisci il json dal programma C, e poi lo recuperi da PHP (o anche tramite ajax volendo).

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    5
    Ciao fermat! Grazie per la risposta! Premetto che non ho ancora troppa confidenza col PHP. Con la exec() la variabile che dovrebbe assumere il valore ricevuto, semplicemente rimane non inizializzata. Se provo a lanciare da terminale il programma C direttamente, sul terminale appare un warning che dice che il programma è uscito con un valore di ritorno diverso da 0, quindi non vorrei che fosse proprio quello il problema (non so se il main può ritornare valori diversi da zero), ma anche lì non ci metterei la mano sul fuoco! Comunque proverò col JSON nei prossimi giorni! Speriamo vada meglio!

  4. #4
    come dice il manuale

    http://php.net/manual/en/function.exec.php

    exec ritorna l'ultima stringa di output del programma, oppure gli passi un array come secondo parametro e lui ti ritorna dentro l'array tutto l'output. Per tornare a te, quindi, se il tuo programma C torna solo una linea di output, fai in modo che ti torni quello che ti serve. ad esempio:

    Codice PHP:

    <?php

    $result 
    exec("/path/to/c/program");

    echo 
    "risultato: $result";

    ?>
    poi dipende che scrive in output questo programma C. Puoi anche scegliere di far scrivere al programma C l'output in un file temporaneo e leggerti il file da php... insomma dipende. Ricordati il problema dei permessi dell'utente: php gira con i permessi dell'utente di apache o webserver che stai usando, quindi tale utente deve avere i permessi per eseguire il programma C
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    5
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    come dice il manuale

    http://php.net/manual/en/function.exec.php

    exec ritorna l'ultima stringa di output del programma, oppure gli passi un array come secondo parametro e lui ti ritorna dentro l'array tutto l'output. Per tornare a te, quindi, se il tuo programma C torna solo una linea di output, fai in modo che ti torni quello che ti serve. ad esempio:

    Codice PHP:

    <?php

    $result 
    exec("/path/to/c/program");

    echo 
    "risultato: $result";

    ?>
    poi dipende che scrive in output questo programma C. Puoi anche scegliere di far scrivere al programma C l'output in un file temporaneo e leggerti il file da php... insomma dipende. Ricordati il problema dei permessi dell'utente: php gira con i permessi dell'utente di apache o webserver che stai usando, quindi tale utente deve avere i permessi per eseguire il programma C
    Ok! Ho fatto un breve test:

    Il programma c è il seguente:
    codice:
    int main(int argc, char* argv[]){
             int a;
             a=3;
             return a;
    }
    Il codice php è:
    codice:
    <?php 
           $result=exec("sudo /home/user/Desktop/programma");
           echo $result;
    ?>
    Sulla console non mi appare niente! E' proprio un problema di ritorno del programma C, perchè se gli faccio fare una printf anzichè un return funziona! Quindi vuol dire che la exec fa la chiamata giusta! Non so più cosa pensare.
    Ultima modifica di piolo94; 13-11-2015 a 16:01

  6. #6
    non so se può dipendere da queste due cose, ma:
    - nel path non indichi il programma da lanciare
    - stai invocando il programma con sudo che richiede l'immissione della password dell'utente, e tu la password non la imposti

    prova a lanciare il programma da terminale, così ti accorgi del comportamento!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    5
    -Sì, avevo sbagliato a ricopiarlo qui, ora l'ho corretto nel post, nel programma ovviamente c'era.
    -ho provato sia con sudo che senza, se nel codice C anzichè fare un return della variabile metto una printf mi stampa il valore richiesto nel terminale. Ho provato anche la shell_exec(), ma anch'essa da gli stessi risultati della exec() semplice.
    Comincio a pensare che non si possa far ritornare al main un valore diverso da zero, visto che viene usato come flag per segnalare la corretta uscita del programma. Possibile?

  8. #8
    non puoi fare una return nel main, devi fare un print... ora non so in C come si faccia a stampare nello stdout, vedi un pò te. Altrimenti non lo passerai mai il valore di a al programma php
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.