Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass value and run c program in php( web application)

Tags:

c++

c

php

I am having big c program.I want execute that function in php and get value

For example

C program

int add( int, int);         

void main()
{
  int i=1;
  printf("i starts out life as %d.", i);

  i = add(5, 10);           

  printf(" And becomes %d after function is executed.\n", i);
}


int add( int a, int b)          
{
  int c;
  c = a + b;
  return c;
}

my web form has value a and b. so when i submit form i want to call the c function add and get the output.

I know there is a function to execute external programs in php like

exec()
shell_exec()

But i am not familiar with this functions.so please give me sample of code. Should i place the c program file(in notepad) in server root folder.

Please guide me ! Thanks in advance

like image 906
Gowri Avatar asked Jul 15 '11 07:07

Gowri


1 Answers

I guess the simplest way would be to call your C from PHP, passing the parameters as arguments. On the C side:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int i = add(atoi(argv[1]), atoi(argv[2]));
    printf("%d\n", i);
    return 0;
}

(obviously, you should add error checking). On the PHP side:

$a = ...;
$b = ...;
$c = exec("/path/to/sum $a $b");

assuming your C program is called sum.


Edit: Just adding a comment about the various approaches that have been suggested to you so far:

  • Starting your C program with exec(), as in my answer above, is really the simplest solution. However, it costs you the creation of a new process every time you call your C code, which can be expensive if you do it a lot.

  • A PHP extension spares the process creation and should be more efficient, especially if you are making many calls to your C code and your C code is fast to compute the result.

  • A daemon is more interesting if your C program is slow to startup (long initialization) but can then process queries fast.

like image 162
Edgar Bonet Avatar answered Sep 23 '22 18:09

Edgar Bonet