[PHP] java讀取PHP介面數據

来源:http://www.cnblogs.com/taoshihan/archive/2016/07/31/5723795.html
-Advertisement-
Play Games

和安卓是一個道理,讀取json數據 PHP文件: java文件: ...


和安卓是一個道理,讀取json數據

PHP文件:

<?php
class Test{
    //日誌路徑
    const LOG_PATH="E:\phpServer\Apache\logs\\error.log";
    //顯示的行數
    const PAGES=50;
    public static function main(){
        header("content-type:text/html;charset=utf-8");
        
        if(!empty($_GET['action'])){
            if(!method_exists('Test',$_GET['action'])){
                echo "404";
            }else{
                self::$_GET['action']();
            }
            exit;
        }
    }

    public static function showApacheLogs(){
        $test=new Test();
        $result=$test->readLogs(self::LOG_PATH,self::PAGES);
        $json=array();
        for($i=0;$i<count($result);$i++){
            $line=$result[$i];
            //註意這裡,如果處理會json解析失敗
            $line=str_replace("\r\n", "", $line);
            $result[$i]=array("num"=>$i+1,"msg"=>urlencode($line));
        }
        $str=stripslashes(urldecode(json_encode($result)));
        echo $str;
    }
    
    /**
    * 讀取日誌
    */
    private function readLogs($filePath,$num=20){
        $fp = fopen($filePath,"r");
        $pos = -2;  
        $eof = "";  
        $head = false;   //當總行數小於Num時,判斷是否到第一行了  
        $lines = array();  
        while($num>0){  
            while($eof != "\n"){  
                if(fseek($fp, $pos, SEEK_END)==0){    //fseek成功返回0,失敗返回-1  
                    $eof = fgetc($fp);  
                    $pos--;  
                }else{                               //當到達第一行,行首時,設置$pos失敗  
                    fseek($fp,0,SEEK_SET);  
                    $head = true;                   //到達文件頭部,開關打開  
                    break;  
                }  
                  
            }  
            array_unshift($lines,fgets($fp));  
            if($head){ break; }                 //這一句,只能放上一句後,因為到文件頭後,把第一行讀取出來再跳出整個迴圈  
            $eof = "";  
            $num--;  
        }  
        fclose($fp);  
        return array_reverse($lines);  
    }
}
Test::main();

java文件:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

public class ReadLogs {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://localhost/test.php?action=showApacheLogs");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(10000);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        // 輸出返回結果
        InputStream input = conn.getInputStream();
        int resLen =0;
        byte[] res = new byte[1024];
        StringBuilder sb=new StringBuilder();
        while((resLen=input.read(res))!=-1){
            sb.append(new String(res, 0, resLen));
        }
        
        String jsonStr=sb.toString();
        //String轉換成JSON
        JSONArray jsonArray=new JSONArray(jsonStr);
        for(int i=0;i<jsonArray.length();i++){
            JSONObject jsonObject=new JSONObject(jsonArray.getString(i));
            String msg=(String) jsonObject.get("msg");
            int num=(int) jsonObject.get("num");
            System.out.println(num+":"+msg);
        }
    }
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.continue,break,ruturn eg:1-100的和 結果為:5050 換為break,查看結果 結果為:10 結論一:break:跳出整個迴圈體 換為continue看一下結果又是多少? 結果為:5045,(除5之外都執行) 結論二:continue跳過當前條件的迴圈 return ...
  • 目錄索引 【無私分享:ASP.NET CORE 項目實戰】目錄索引 簡介 本章我們來介紹下Asp.net Core 使用 CodeFirst 創建資料庫和表,通過 控制台 和 dotnet ef 兩種方式 修改EF上下文對象,添加測試類 我修改了一下名字,Domains 改為了 wkmvc.Data ...
  • 字元串操作大概是電腦程式中最常見的操作了,Java中表示字元串的類是String,它有哪些方法?內部是如何實現的?如何處理各種不同的編碼?不可變性意味著什麼?字元串常量到底是什麼?hashCode是如何實現的?... ...
  • lambda是一種匿名函數,python lambda可以使簡單的函數簡潔的表達,,C++的lambda使類似嵌套函數的功能得以實現 python的lambda VC++14的lambda lambda是vc++獨有的,在vc++11以後,擴展這個功能主要是為了使代碼書寫簡潔,gcc沒有這個功能 直 ...
  • 二叉查找樹,又名二叉排序樹,亦名二叉搜索樹,一種常用的樹形數據結構 ...
  • 1:為什麼會有JSP jsp全名(java server pages)中文叫做java伺服器頁面。在Servlet那一篇我們發現用Servlet可以生成動態頁面,但是我們卻在Servlet中卻寫了大量的html標簽,此外在Servlet中我們不得不將大量靜態顯示內容和動態生產內容混合在一起,使得我們 ...
  • 五、變數與賦值 Python中的變數在聲明時不需要指定其類型,它會根據你的賦值自動判斷 對於數字和字元這種值類型的賦值,變數只是對它的引用,並不能直接刪除其值(其實由於Python中的垃圾回收機制,你並不能真正刪除任何東西,由Python自動判斷它“沒有人”了才會刪除它) 六、數字 int:有符號整 ...
  • 這一節主要介紹對資料庫的訪問操作:通過管理器(manage),對對象進行檢索、修改、刪除等操作,詳細介紹瞭如何針對不同的模型自定義管理器。 查詢和管理工作 現在,我們已經有了一個功能完善的Django管理站點來管理我們的應用,是時候學習一下如何從資料庫中檢索我們所需要的數據。Django自帶一個功能 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...