在项目开发过程中遇到app端自动更新,查阅了相关资料然后把Appcan客户端自动更新PHP版本号的方法整理出来,具体代码讲解如下。
服务端文件:update.php、version.php、version.xml
update.php 内容:
PHP
<?php define('CIN', true); $oldver = $_REQUEST['ver'];//客户端传过来的版本号 $platform = $_REQUEST['platform'];//客户端的平台 $info = simplexml_load_file('version.xml'); $iphone_filename=$info->news['iphone_filename']; //iphone下载文件 $android_filename=$info->news['android_filename']; //androiad下载文件 $version=$info->news['version']; //版本号 if ($version>$oldver) { switch ($platform) { case "0"://iphone echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; echo "<results>"; echo "<updateFileName>i2ty</updateFileName>";//客户端名字 echo "<updateFileUrl>itunesURL</updateFileUrl>";//返回给客户端的下载地址 echo "<fileSize>0</fileSize>";//文件大小 echo "<version>".$version."</version>";//版本信息 echo "</results>"; break; case "1"://android echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; echo "<results>"; echo "<updateFileName>i2ty</updateFileName>";//客户端名字 echo "<updateFileUrl>http://i2ty.com/app/".$android_filename."</updateFileUrl>";//返回给客户端的下载地址 echo "<fileSize>0</fileSize>";//文件大小 echo "<version>".$version."</version>";//版本信息 echo "</results>"; break; } } ?>
version.php 内容:
PHP
<?php define('CIN', true); $result['vtitle']="更新"; $result['vcontent']="新版本有更新喔!~新增功能修复各种错误"; print_r(json_encode($result)); ?> version.xml 内容: PHP <?xml version="1.0" encoding="utf-8" ?> <root desc="Login"> <news version="00.00.0001" iphone_filename="i2ty.ipa" android_filename="i2ty.apk" /> </root> index.html 客户端: PHP window.uexOnload = function(type){ if (!type) { update(); } var flag_sdcard = 1; var updateurl = '';//下载新apk文件地址 var filepath2 = "/sdcard/";//保存到sd卡 var fileName = '';//新版本文件名 var platform = '';//平台版本 function update() { //安卓版 ,显示下载进度 (step:7) uexDownloaderMgr.onStatus = function(opId, fileSize, percent, status) { if (status == 0) { // 下载中... Log('download percent ' + percent + '%'); uexWindow.toast('1', '5', '正在下载'+localStorage.app_title+'新版,请稍后。进度:' + percent + '%', ''); } else if (status == 1) {// 下载完成. uexWindow.closeToast(); uexDownloaderMgr.closeDownloader('14');//关闭下载对象 uexWidget.installApp(filepath2+fileName);// 安装下载apk文件 } else { uexWindow.toast('1', '5', '下载出错,请关闭'+localStorage.app_title+'再次运行.', ''); } }; //安卓版 ,创建下载对象回调函数(step:6) uexDownloaderMgr.cbCreateDownloader = function(opId, dataType, data) { Log('uexDownloaderMgr.cbCreateDownloader data='+data); if (data == 0) { //updateurl是通过调用cbCheckUpdate回调后,放入全局变量的 uexDownloaderMgr.download('14', updateurl, filepath2+fileName, '0');//开始下载apk文件 } else if (data == 1) { ; } else { ; } }; //提示更新模态框按钮事件回调函数,判断用户选择更新还是取消 (step:5) uexWindow.cbConfirm = function(opId, dataType, data) { Log('uexWindow.cbConfirm '); //调用对话框提示函数 if (data == 0) { //用户点击稍后按钮,不进行更新 } else { //用户点击确定按钮,进行更新 if (platform == 0) { //苹果版更新,通过浏览器加载appstore路径 uexWidget.loadApp(updateurl,'',''); //uexWidget.loadApp("", "", updateurl);//旧方法 已经不可以使用了。 } else if (platform == 1) { //安卓版更新,通过创建下载对象进行下载 uexDownloaderMgr.createDownloader("14"); } else { ; } } }; //调用检查更新回调函数,请求成功后,弹出模态框让用户选择是否现在更新(step:4) uexWidget.cbCheckUpdate = function(opCode, dataType, jsonData) { Log('jsonData='+jsonData); var obj = eval('(' + jsonData + ')'); if (obj.result == 0) { // tips = "更新地址是:" + obj.url + "<br>文件名:" + obj.name + "<br>文件大小:" + // obj.size + "<br>版本号:" + obj.version; updateurl = obj.url; fileName = obj.name+".apk"; getVersionContent(); // var value = "稍后;更新"; // var mycars = value.split(";"); // uexWindow.confirm('', '当前有新版本,是否更新?', mycars);//弹出提示框,是否确定更新 } else if (obj.result == 1) { //苹果 //alert("更新地址是:" + obj.url + "<br>文件名:" + obj.name + "<br>文件大小:" + //obj.size + "<br>版本号:" + obj.version) ;// tips = "当前版本是最新的";alert(tips); } else if (obj.result == 2) { ;// tips = "未知错误";alert(tips); } else if (obj.result == 3) { ;// tips = "参数错误";alert(tips); } }; //检查是否已经存在sd卡的回调函数(step:3) uexFileMgr.cbIsFileExistByPath = function(opCode, dataType, data) { Log('uexFileMgr.cbIsFileExistByPath flag_sdcard='+flag_sdcard+' , data='+data); if (flag_sdcard == 0) { if (data == 0) { Log('sdcard不存在,根据具体情况处理'); } else { //执行检查更新 uexWidget.checkUpdate();//根据config.xml里面配置的检查更新地址发起http请求 } flag_sdcard = 1; } }; //获取平台版本回调函数,确定是客户端是那个平台的客户端 (step:2) uexWidgetOne.cbGetPlatform = function(opId, dataType, data) { Log('uexWidgetOne.cbGetPlatform '); //获取系统版本信息回调函数 platform = data; Log('platform= '+platform); if (data == 0) { // 是iphone uexWidget.checkUpdate();// 直接调用检查更新,检查更新地址在config.xml里面有配置 } else if (data == 1) { // 是android flag_sdcard = 0; uexFileMgr.isFileExistByPath('/sdcard/');//先判断是否存在sd卡,再调用checkUpdate来进行更新 } else { // 是平台 } }; uexWidgetOne.getPlatform();//获取平台版本 (step:1) } function Log(s) { uexLog.sendLog(s); } function getVersionContent(){ var url = web_url+"version.php"; uexXmlHttpMgr.onData = getvSuccess; uexXmlHttpMgr.open(777, "get", url,""); uexXmlHttpMgr.send(777); } function getvSuccess(opid,status,result){ if (status == -1) { uexWindow.toast("0","5","连接不上网络^_^哦","3000"); } if(status==1){ uexXmlHttpMgr.close(777); uexWindow.closeToast(); if(result=="[]"){uexWindow.toast("0","5","无","2000");} else{ var con=eval('(' + result + ')') var value = "稍后;更新"; var mycars = value.split(";"); uexWindow.confirm(con.vtitle, con.vcontent, mycars);//弹出提示框,是否确定更新 } } }
最后app 的 config.xml 文件配置更新地址填写为:
http://www.i2ty.com/update.php
APP端更新提示:
弹窗内容根据 version.php 文件内容可以自定义。
以上内容就是本文讲解使用Appcan客户端自动更新PHP版本号的方法,希望对大家有所帮助。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
