2012-03-25 4 views
2

Ich versuche eine a C++ Datei auf dem Server zu kompilieren. Ich habe eine Windows 7 64-Bit-Installation zusammen mit Mingw32 C/C++ Compiler auf dem System mit WampServer2.0 (PHP 5.3.0) installiert. Ich habe die env-Variablen bereits auf relative Pfade gesetzt (c: \ MinGW \ bin). Das folgende Stück Code erzeugt keine ausführbare Datei in dem Dest_folder jedoch der Befehl ganz genau ausgeführt wird, wenn von cmd (Eingabeaufforderung) ausgeführt und erzeugt die ausführbareIch kann g ++ über php system() nicht ausführen

<?php 
$string = system("g++ -o C:\\wamp\\www\\Dest_folder\\file.exe C:\\wamp\\www\\Dest_folder\\file.cpp", $retval); 
echo $retval; 
echo $string; 
?> 

Die Variable $ string sollte die letzte Zeile der kehrt Befehlsausgabe bei Erfolg und FALSE bei Fehler (was in diesem Fall nichts zurückgibt) und die Variable $ retval gibt 1 zurück. Mache ich etwas falsch? Ich habe auch bemerkt, dass jeder erfolgreiche Aufruf von system() (alle anderen Aufrufe außer der g ++ - Kompilierung) 0 als $ retval erzeugt.

Antwort

4

Der Backslash hat eine besondere Bedeutung in PHP Stringliterale, so dass Sie es entkommen müssen:

$string = system("g++ -o C:\\wamp\\www\\Dest_folder\\file.exe C:\\wamp\www\\Dest_folder\\file.cpp", $retval); 
+0

Ich habe es schon versucht, es macht keinen Unterschied. – Seeder

+0

@Seeder: Kann 'g ++' von deiner Shell gefunden werden? Geben Sie den gesamten Pfad an. –

+0

Ich habe die Pfad- und Umgebungsvariablen für C: \ MinGW \ bin (mit Windows Powershell) festgelegt. Trotzdem habe ich versucht, den gesamten Pfad anzugeben, funktioniert aber immer noch nicht. Wie gesagt, es funktioniert gut, wenn 'g ++ -o C: \ wamp \ www \ Dest_folder \ file.exe C: \ wamp \ www \ Dest_folder \ file.cpp' von der Eingabeaufforderung aus ausgeführt wird, aber nicht, wenn ich es über das System anrufe (). – Seeder

0

Wenn die Backslash Festsetzung Ihr Problem nicht lösen, für die Zeile in der php.ini-Datei überprüfen: disable_functions . Und wenn Sie "System" geschrieben sehen, entfernen Sie es.

grüße

+0

Der eigentliche Code hat ziemlich viele system() Aufrufe, alle von ihnen funktionieren gut (ab sofort), mit Ausnahme von diesem. Also ich denke, dies schließt die Möglichkeit aus, dass System() in php.ini deaktiviert ist – Seeder

+0

Beinhaltet Ihr cpp h-Dateien? – grifos

+0

Meinst du, der Standard # beinhaltet am Anfang? Es verwendet iostream, fstream, vector.h usw. Keine zusätzlichen .h-Dateien zu verknüpfen – Seeder

Verwandte Themen