首頁  >  文章  >  後端開發  >  PHP後台與手機APP介面開發實例代碼

PHP後台與手機APP介面開發實例代碼

小云云
小云云原創
2018-05-29 10:44:276919瀏覽

本文主要和大家分享PHP後台與手機APP介面開發實例程式碼,希望能幫助大家

一、手機APP(客戶端)程式介面

這裡採用在PC上使用C++程式模擬HTTP協定資料的POST

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define DEST_IP "10.209.177.22"
#define DEST_PORT 80
#define MAX_DATA_SIZE 1024

int main()
{
        int ret;
        int sockfd;
        struct sockaddr_in dest_addr;
        memset(&dest_addr, 0x00, sizeof(sockaddr_in));
        dest_addr.sin_family = AF_INET;
        dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
        dest_addr.sin_port = htons(DEST_PORT);

        cout << "dest addr IP:" << inet_ntoa(dest_addr.sin_addr) << endl;

        sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (sockfd < 0) {
                cout << "create socket fail!" << endl;
                exit(1);
        }

        ret = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
        if (ret != 0) {
                cout << "connect server fail!" << endl;
                close(sockfd);
                exit(1);
        } else {
                cout << "connect server success!" << endl;
        }
        cout << endl;

        int sendlen, recvlen;
        char sendbuf[MAX_DATA_SIZE] = {0};
        char recvbuf[MAX_DATA_SIZE] = {0};
        string body("user=hello&password=123456");
        int content_length = body.length();
        snprintf(sendbuf, sizeof(sendbuf) - 1,
        "POST /api.php HTTP/1.1\r\n"
        "Host: 10.209.177.22\r\n"
        "Content-Type: application/x-www-form-urlencoded\r\n"
        "Content-Length: %d\r\n",
        content_length
        );
        strcat(sendbuf, "\r\n");
        strcat(sendbuf, body.c_str());

        sendlen = send(sockfd, sendbuf, sizeof(sendbuf), 0);
        if (sendlen < 0) {
                cout << "send fail" << endl;
                close(sockfd);
                exit(1);
        }

        if ((recvlen = recv(sockfd, recvbuf, sizeof(recvbuf), 0)) == -1) {
                cout << "recv fail" << endl;
                close(sockfd);
                exit(1);
        } else {
                cout << recvbuf << endl;
        }

        close(sockfd);

        return 0;
}

二、後台PHP測試程式

三、實作效果


# #上圖中,客戶端C++程序,POST資料給後台Nginx+PHP後,PHP透過以下前兩種方式取得POST的資料:

方法1、最常見的方法是:$_POST[' fieldname'];

說明:只能接收Content-Type: application/x-www-form-urlencoded提交的資料。
解釋:也就是表單POST過來的資料。

方法2、file_get_contents("php://input");
說明:
允許讀取 POST 的原始資料。
和 $HTTP_RAW_POST_DATA 比起來,它給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。
php://input 不能用於 enctype="multipart/form-data"。
解釋:
對於未指定 Content-Type 的POST數據,則可以使用file_get_contents(“php://input”);來取得原始資料。
事實上,用PHP接收POST的任何資料都可以使用本方法。而不用考慮Content-Type,包括二進位檔案流也可以。

所以用方法二是最保險的方法。

方法3、$GLOBALS['HTTP_RAW_POST_DATA'];

說明:

總是產生 $HTTP_RAW_POST_DATA  變數包含有原始的 POST 資料。
此變數僅在碰到未識別 MIME 類型的資料時產生。
$HTTP_RAW_POST_DATA  對於enctype="multipart/form-data"  表單資料不可用
如果post過來的資料不是PHP能夠辨識的,可以用$GLOBALS['HTTP_RAW_POST_DATA']來接收,
例如text /xml 或soap 等等
解釋:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始資料。
$_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以後的資料。

但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的資料取決於Content-Type的設置,即POST資料時必須明確示指明Content-Type:application/x-www -form-urlencoded,POST的資料才會存放到$GLOBALS['HTTP_RAW_POST_DATA']中。

對於上傳文件,採用POST enctype="multipart/form-data"。 PHP後端程式碼範例:





"; print_r($_FILES); if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "
"; } else { $file = fopen($_FILES["file"]["tmp_name"], "r"); while (!feof($file)) { echo fgetc($file); } fclose($file); } ?>

相關推薦:

PHP開發APP介面需要注意哪些問題

laravel編寫APP介面( API)

關於PHP寫入APP介面的安全性問題探討一#

以上是PHP後台與手機APP介面開發實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn