模块要实现的功能是在c++中利用命名管道和php脚本进行交互。先上出错部分的代码HANDLE hStdoutR, hStdoutW, hStdinR, hStdinW;
STARTUPINFO si;
PROCESS_INFORMATION pi;
char env[255] = "REQUEST_METHOD=POST\\OCONTENT_LENGTH=18\\OCONTENT_TYPE="
"application/x-www-form-urlencoded\\OSCRIPT_FILENAME=D:\\test.php";
InitPipe(&hStdoutR, &hStdoutW, &hStdinR, &hStdinW);  //这里是初始化命名管道
FillStartUpInfo(&si, &hStdoutW, &hStdinR);  //填充启动信息,为CreateProcess做准备if(!CreateProcess(NULL, "d:\\php\\php-cgi.exe D:\\test.php", NULL, NULL, 1, 
NORMAL_PRIORITY_CLASS, env, NULL, &si, &pi))
exit(1);  //创建进程失败,退出断点调试的时候if判断语句中的条件表达式为真,结果是直接退出了程序,请问为什么会发生这种情况?另外希望能解释一下环境变量env的意思

解决方案 »

  1.   

    自己顶一下,顺便问下,发生这种情况是不是和apache服务器或者php的配置文件也有关系,因为在启动apache服务器时提示“no listening sockets available, shutting down  unable to open logs...” 搜了一下,发现之前有人遇到过类似的问题,但网上给出的解决方法在本机上好像行不通该如何解决这个问题,或者如何配置php的配置文件呢?
      

  2.   

    你在做HTTP服务器?我刚做完一个类似这种,你贴出来的代码我也见过类似的。大概明白咋回事。我觉得发生这种情况,应该与Apache和php配置没什么关系,应该是Creatprocess函数的问题,可以测试下调用其他命令。env是局部级环境变量,用于为PHP-CGI执行脚本所需的变量,比如我们编写的php脚本中经常会用到$_GET等类似的超级变量,这些变量的值就是通过env传递进去的。另外,这里if(!CreateProcess(NULL, "d:\\php\\php-cgi.exe D:\\test.php", NULL, NULL, 1, 
        NORMAL_PRIORITY_CLASS, env, NULL, &si, &pi))的D:\\test.php应该是多余的,环境变量里已经有了执行脚本路径了。
      

  3.   

    感谢回复,关于CreateProcess函数的问题,具体是调用其他什么命令呢
    关于你说的第2点,能否在详细说一下env这个环境变量为什么要这样设置
    第3点,环境变量中确实有了执行脚本的路径了,但是php-cgi并不知道需要它解释的是哪个脚本,所以test.php并不是多余的
      

  4.   

    感谢回复,关于CreateProcess函数的问题,具体是调用其他什么命令呢
    关于你说的第2点,能否在详细说一下env这个环境变量为什么要这样设置
    第3点,环境变量中确实有了执行脚本的路径了,但是php-cgi并不知道需要它解释的是哪个脚本,所以test.php并不是多余的第一点,随便调用个cd ls之类的命令试下,是否是执行php-cgi期间出了问题。如果是的话,那就是参数出了问题。
    第二点,ENV是用来向PHP-CGI传递其运行所需的变量,比如POST,GET数据,SERVER等等。
    第三点,确实是多余的,ENV中已经告诉了PHP-CGI要执行哪个脚本了。你可以手动在CLI下测试下,用EXPORT写入环境变量,然后直接调用PHP-CGI