你看php支持什么交互了,我對php不了解,,關鍵看php支持什么,obj-c可以發(fā)任何格式的消息,因為obj-c是一個programming language,php相對來說是一個script language,功能也是有限的。JSON還是比較好的,google現(xiàn)在開始統(tǒng)一使用json了,xml正慢慢被淘汰。
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設服務10余年為成都陽光房小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)頁設計營銷網(wǎng)站建設商城網(wǎng)站建設手機網(wǎng)站建設小程序網(wǎng)站建設網(wǎng)站改版,從內容策劃、視覺設計、底層架構、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設服務。
在C++程序中,在不依賴任何WEB SERVER調用PHP,并取得執(zhí)行結果完成交互
首先,在我們的PHP安裝好后,在目錄下有一個php-cgi.exe,我們只要執(zhí)行這個CGI程序,并將數(shù)據(jù)通過命名管道傳遞給它,然后把執(zhí)行結果通過命名管道讀取出來即可,過程并不復雜!請看如下代碼:
命名管道的創(chuàng)建:
SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES)};
sa.bInheritHandle = 1;
sa.lpSecurityDescriptor = NULL;
HANDLE hStdoutR, hStdoutW, hStdinR, hStdinW;
CreatePipe(hStdoutR, hStdoutW, sa, 0);
SetHandleInformation(hStdoutR,HANDLE_FLAG_INHERIT, 0);
CreatePipe(hStdinR, hStdinW, sa, 0);
SetHandleInformation(hStdinW, HANDLE_FLAG_INHERIT, 0);
啟動php-cgi進程: STARTUPINFO si = {sizeof(STARTUPINFO)};
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hStdoutW;
si.hStdInput = hStdinR;
char env[255] = "REQUEST_METHOD=POST\0CONTENT_LENGTH=18\0CONTENT_TYPE=
application/x-www-form-urlencoded\0SCRIPT_FILENAME=D:\\test.php";
if(!CreateProcess(NULL, "d:\\php5\\php-cgi.exe D:\\test.php",
NULL, NULL, 1, NORMAL_PRIORITY_CLASS, env, NULL, si, pi))
return 0;
CloseHandle(hStdoutW);
CloseHandle(hStdinR);
傳遞數(shù)據(jù):if(!WriteFile(hStdinW, "var=Hello VCKBASE!", 18, dwWritten, NULL))
return 0;
CloseHandle(hStdinW);
讀取返回數(shù)據(jù):char buf[1000] = {0};
DWORD dwRead = 0;
while(ReadFile(hStdoutR, buf, sizeof(buf), dwRead, NULL) dwRead != 0){
printf(buf);
}
CloseHandle(hStdoutR);
D盤的test.php
?
echo $_REQUEST["var"];
?
執(zhí)行結果:
X-Powered-By: PHP/5.3.1
Content-type: text/html
Hello VCKBASE!
事實上,在我們使用C++的時候,在調用其他CGI程序,例如PERL,其操作技巧也是也大同小異,如果你打算做一個自己的WEB服務器,調用CGI程序是少不了的。
你這樣做簡直就是浪費了PHP 。
PHP 是做后端的不是做前端的。前端用 html。
如果不是效率要求特別高,是用不上C 的。
而且PHP 的效率已經(jīng)非常高了。
post get就可以交互了
xml都可以的了
如果我的回答沒能幫助您,請繼續(xù)追問。
您也可以向我們團隊發(fā)出請求,會有更專業(yè)的人來為您解答。
/*server.c*/
#include string.h
#include stdio.h
#include netinet/in.h
#include stdlib.h
#define SERV_PORT 8000
int main()
{
int sockfd,n,servaddr_len,client_len,connfd;
char * server_ip = "127.0.0.1";
char buf[80];
struct sockaddr_in server,client;
sockfd = socket (AF_INET,SOCK_STREAM,0);
bzero(server,sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(server_ip);
server.sin_port = htons(SERV_PORT);
servaddr_len = sizeof(server);
client_len=sizeof(client);
bind(sockfd,(struct sockaddr *) server,servaddr_len);
listen(sockfd,6);
while(1)
{
bzero(buf,sizeof(buf));
printf("等待讀取數(shù)據(jù).......\n");
connfd=accept(sockfd,(struct sockaddr *)client,client_len);
n = read(connfd,buf,sizeof(buf));
write(connfd,buf,n);
printf("讀取的數(shù)據(jù)為:%s\n",buf);
}
close(sockfd);
return 0;
}
?php
$server_ip="127.0.0.1";
$port = 8000;
if($_POST['submit'])
{
$buf=trim($_POST['buf']);
$sockfd=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("創(chuàng)建失敗");
socket_connect($sockfd,$server_ip,$port)or die("連接錯誤");
socket_write($sockfd,$buf,strlen($buf))or die("寫入錯誤");
$a=socket_read($sockfd,80);
echo $a;
$buf="";
socket_close($sockfd);
}
?
form action="tcpclient.php" method="post"
請選則發(fā)送方式:brinput type=text name="buf"
input type=submit name="submit" value="發(fā)送"
/form
tcp方式不能通信解決方法
執(zhí)行:getsebool -a |grep http
查看httpd_can_network_connect -- off 是否為打開狀態(tài)
執(zhí)行:setsebool httpd_can_network_connect on 把httpd_can_network_connect設置為打開狀態(tài)
tcp方式不能通信解決方法
執(zhí)行:getsebool -a |grep http
查看httpd_can_network_connect -- off 是否為打開狀態(tài)
執(zhí)行:setsebool httpd_can_network_connect on 把httpd_can_network_connect設置為打開狀態(tài)