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):
<?php
echo '<?xml version="1.0" encoding="iso-8859-2"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>Upload</title>
</head>
<body>
<!--Formularz do uploadu-->
<div>
<form enctype="multipart/form-data" action="#" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<input name="plik" type="file" />
<input type="submit" value="Upload" />
</form>
</div>
<?php
//zmienne dotyczące załadowanego pliku
$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];
move_uploaded_file($plik_tmp, "upload/$plik_nazwa"); //aby zadziałało, w katalogu głownym serwera (dla Apacha - htdocs) musi być katalog /upload echo "Plik: <b>$plik_nazwa</b> o rozmiarze <b>$plik_rozmiar bajtów</b> został przesłany na serwer!<br><br>";
//Lisintg programu
$lines=file("upload/$plik_nazwa"); //odczytanie pliku z dysku echo "<b>Listing of ".$plik_nazwa."</b><br>"; foreach($lines as $line)
//Kompilator
$plik_root=substr($plik_nazwa,0
,strpos($plik_nazwa,".")); //wycięcie rozszerzenia z pliku 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) echo "<br><b>Informacje od kompilatora:</b><br>"; print_r($kompilator); //wypisanie informacji od kompilatora
//Uruchomienie programu
exec("C:/xampp/htdocs/upload/".$plik_root.".exe",$program); echo ("<br><b>Wykonany program:</b><br>"); }
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) ?>
</body>
</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 ...