2012-03-25 106 views
2

我想在服务器上编译一个C++文件。我在运行WampServer2.0(php 5.3.0)的系统上安装了Windows 7 64位安装以及mingw32 c/C++编译器。我已经将env变量设置为相对路径(c:\ MinGW \ bin)。下面的代码段中不产生任何可执行在DEST_FOLDER,但是命令运行从CMD(命令提示)被执行时非常清楚,并产生可执行无法通过php系统执行g ++()

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

的$字符串变量应返回的最后一行命令输出成功,失败时失败(在这种情况下不返回任何东西),$ retval变量返回1.我做错了什么?另外我注意到,每次成功的system()调用(除g ++编译外的所有其他调用)都会产生0作为$ retval。

回答

4

的反斜杠在PHP字符串字面特殊的意义,所以你要逃避它:

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

我已经试过了,它没有任何区别。 – Seeder 2012-03-26 00:12:13

+0

@Seeder:你的shell可以找到'g ++'吗?指定整个路径。 – 2012-03-26 00:16:03

+0

我确实为C:\ MinGW \ bin设置了路径和环境变量(使用Windows PowerShell)。尽管如此,我通过指定整个路径尝试尝试,但仍然无法正常工作。正如我所说的,当从命令提示符执行'g ++ -o C:\ wamp \ www \ Dest_folder \ file.exe C:\ wamp \ www \ Dest_folder \ file.cpp'时,它可以正常工作,但是当我使用system )。 – Seeder 2012-03-26 00:28:23

0

如果固定反斜杠没有解决您的问题,检查为线php.ini文件:disable_functions选项。如果您看到“系统”已写入,请将其删除。

关于

+0

实际的代码有很多system()调用,它们都工作得很好(现在),除了这个。所以我想这排除了系统()在php.ini中被禁用的可能性 – Seeder 2012-03-26 00:14:53

+0

您的cpp是否包含.h文件? – grifos 2012-03-26 00:19:33

+0

你的意思是,标准#包括在开始?它使用iostream,fstream,vector.h等。没有额外的.h文件被链接 – Seeder 2012-03-26 00:32:55