Planowałem napisanie strony internetowej na którą możnaby było uploadować pliki o rozszerzeniu .cpp następnie byłyby kompilowane przez kompilator Borland 5.5 na serwerze i uruchamiane dla danego testu. Udało mi się napisać kod php tworzący dobry formularz, kompilujący plik oraz uruchamiający go. Jednakże nie wiem jak uruchomić go dla jakiś danych wejściowych chociażby w pliku .txt.

Oto kod: (odwołania do borlanda są do dysku C: bo na razie ćwiczyłem na XAMPie):

  1. <?php
  2. echo '<?xml version="1.0" encoding="iso-8859-2"?>';
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  5. transitional.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  9. <title>Upload</title>
  10. </head>
  11. <body>
  12.  
  13. <!--Formularz do uploadu-->
  14. <div>
  15. <form enctype="multipart/form-data" action="#" method="POST">
  16. <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
  17. <input name="plik" type="file" />
  18. <input type="submit" value="Upload" />
  19. </form>
  20. </div>
  21.  
  22.  
  23. <?php
  24. //zmienne dotyczące załadowanego pliku
  25. $plik_tmp = $_FILES['plik']['tmp_name'];
  26. $plik_nazwa = $_FILES['plik']['name'];
  27. $plik_rozmiar = $_FILES['plik']['size'];
  28.  
  29. if(is_uploaded_file($plik_tmp)) {
  30. move_uploaded_file($plik_tmp, "upload/$plik_nazwa"); //aby zadziałało, w katalogu głownym serwera (dla Apacha - htdocs) musi być katalog /upload
  31. echo "<pre> ";
  32. echo "Plik: <b>$plik_nazwa</b> o rozmiarze
  33. <b>$plik_rozmiar bajtów</b> został przesłany na serwer!<br><br>";
  34.  
  35. //Lisintg programu
  36. $lines=file("upload/$plik_nazwa"); //odczytanie pliku z dysku
  37. echo "<b>Listing of ".$plik_nazwa."</b><br>";
  38. foreach($lines as $line)
  39.  
  40. //Kompilator
  41. $plik_root=substr($plik_nazwa,0,strpos($plik_nazwa,".")); //wycięcie rozszerzenia z pliku
  42. exec("C:/Borland/BCC55/Bin/bcc32.exe -eC:/xampp/htdocs/upload/".$plik_root.".exe C:/xampp/htdocs/upload/".$plik_nazwa,$kompilator); //uruchomienie kompilatora (tak jak z linii komend)
  43. echo "<br><b>Informacje od kompilatora:</b><br>";
  44. print_r($kompilator); //wypisanie informacji od kompilatora
  45.  
  46. //Uruchomienie programu
  47. exec("C:/xampp/htdocs/upload/".$plik_root.".exe",$program);
  48. echo ("<br><b>Wykonany program:</b><br>");
  49. print_r($program);
  50. echo "</pre>";
  51. }
  52. elseif($plik_tmp) echo "Plik: <b>$plik_nazwab NIE</b> został przesłany na serwer!"; //w przypadku, gdy plik nie zostanie przesłany (np: zbyt duży rozmiar)
  53. ?>
  54. </body>
  55. </html>


Jak tam zuploaduje program w C++, który wypisuje tak to zmienna program (jako tablica) będzie zawierała tak i tak zostanie wypisane. Co jeśli program miałby w sobie wczytywanie. Chciałbym, żeby na serwerze znajdował się jakiś plik test.txt, który zawierałby dane wejściowe. Proszę Was o pomoc w poprawce mojego kodu, aby uruchomić program który został skompilowany dla tego testu i wypisać wynik jego działania dla tego testu.

Przykładowo uploaduję program mnożący liczbę przez 2. I w pliku test mam liczbę 3. Chcę tak napisać funkcję exec, aby dla liczby 3 (plik test.txt) program działając w tym przypadku zwrócił 6. Proszę wytłumaczcie mi jak to zrobić i zapodajcie jeszcze coś o funkcji exec, bo zasoby google są w tej sprawie marne ...