好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php开发移动端 php相关的技术php移动开发技术

很多站长朋友们都不太清楚php开发移动端,今天小编就来给大家整理php开发移动端,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 做php开发好吗?有前途没? 2、 php可以开发手机app吗 3、 PHP可以做移动端吗 4、 如何利用Thinkphp框架开发移动端接口详解 5、 PHP开发与Web前端开发有什么区别 6、 PHP可以做什么 做php开发好吗?有前途没?

做php开发好吗?有前途没?

1、别说PHP,任何一门语言学到极致都是前途光明,其实也不用到达顶尖水平,哪怕是在行业的前30%,在收入上绝对高于多数普通人了。所以

做php开发好!有前途!

2、而这一切不需要你有多高的出身,也不需要你有多么有钱的父亲,只需要你努力。

3、php相对于java,C语言 ,Python这些程式语言算是比较好学的了,学完后目标:可满足企业前台建站要求,可仿制任何网站页面,并能够实现浏览器相容性,PC端与移动端相容性。并能够使用Javascript验证技术,可以无压力的胜任前端工程师职位。

学PHP开发有前途吗

PHP开发的前途是有的,只是现在越来越多的技术行业的前景远远超过PHP开发了

一:WEB开发首选语言

和网际网路有关的企业都可能使用到php!全世界知名网站在使用php开发!

二:市场饱和度低,企业需求量大

目前在国内,学习php的人较少,缺乏专业性人才,企业需求也日渐增多,可以说这方面的专业人才是供不应求,平均每5个职位抢一个人!快时代,速度决定成败。被持续风靡的开发软体php,不仅功能强大,更主要的是相比C和php来说,学习周期短,掌握相对容易。

三:微信和小程式首选后台语言

微信和小程式官方推荐使用php语言作为开发语言。

四:可轻松渗透移动端

前景还是不错的,至少很多网际网路企业都需要这样开发人才!学习PHP到原始码时代,专业培养PHP技术精英!

什么东西学好了都是很有前途的,主要问题是你能不能学到精通的水平

学习PHP开发怎么样?有前途吗?

目前来看php是所有web开发中使用最多的语言,也是最有生命力的语言,同时学了以后也好找工作,谁也不能说5年或10年以后会怎么样,但是从发展历史来看还没有哪个语言因为其突然份额下滑导致学这个语言的程式设计师很快失业的,其实我们可以这样看问题,无论php未来怎么样,最起码未来几年内是不会马上衰落的,大部分网站是用php编写的,即使谷歌在不久的将来出一个比php更优秀的语种,那么那些网站也不能一下子全换成那个语言,需要一个过渡期,php也是经历了好多年才发展到今天的,才逐渐被人们认可的。如果学习的话像原始码时代还是不错的~

学php开发还有前途吗、过时了吧

PHP开发者就业市场广阔,但国内PHP精英群体相对来说却并不多。一则因为国内高校并未开设PHP相关课程,想要迈入行业只能自学或培训。二来许多培训机构为节约教学成本只按老套教学,多数学员只能学到PHP+Node或PHP+GO。这个时代如此教学,面临的只能是被淘汰,改革迫在眉睫,千锋重新定义php,大资料+大并发丛集,双框架教学 宽口径就业

在武汉培训PHP开发还有前途吗?

现在学习这块的人非常多,主要也是根据自己的兴趣爱好选择,从行业的需求来看,前景很不错,技术人才缺乏,培训之后的待遇问题还是需要看自身学习程度,是否能把技术熟练掌握,独立解决问题等,待遇与地域不同而不同。

大专生学习php开发有前途吗?

思维不要局限在这里!! 现在是网际网路的时代,你进入了网际网路, 你肯定就是有饭吃的

女生学软体开发好吗?有没有前途?

你好,如果你对程式设计感兴趣的话,可以学,如果你对它一点都不了解,可以学习动漫制作、UI设计等专业。

学美发好吗,有前途吗?

不错,我建议你学美发的同时再学销售!

php可以开发手机app吗

因为PHP是脚本语言,主要用于服务端的开发,是负责完成 B/S架构 或 C/S架构 的S部分,但是PHP可不仅仅只能在互联网站上发展,一个PHP for Android(PFA)站点表示他们将可以发布编程模型、工具盒文档让PHP在Android上实现应用。

怎么利用PHP框架语言开发手机APP?

第一:和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET 也许是 POST,这个需要开发团队相互之间约定好,或者制定统一规范。

第二:有了参数,根据应用需求,完成数据处理,例如:任务进度更新、APP内购、一局游戏结束数据提交等等

第三:数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:任务状态、内购结果、玩家信息等等

P.S:数据怎么返给客户端?直接输出的形式,如:JSON、XML、TEXT 等等。

第四:客户端获取到你返回的数据后,在客户端本地和用户进行交互!

php不能编写 app应用程序,主要用于B/S结构(Browser/Server,浏览器/服务器模式)开发使用。但是php可以作为服务器与app应用交换数据服务端API.

学习APP现在流行的有三种手机平台,android、IOS,windows。他们都各有各自的编程语言,具体可以在百度搜索下各自平台制作学习。

移动后台都是 PHP、Python,Java都重,更别说C++了。看你用什么协议了,http ,tcp/ip。nodejs 可以把路由,form表单验证写成c++的模块, 主要是提供接口给移动端APP调用,可以从成本、服务器资源的占用、开发效率、运行效率,后台复杂逻辑处理的能力 等说一下。目前我就知道的有jsp,asp,php。

利用PHP框架开发手机APP需要考虑两种可能:

第一:如果需要即时通讯,也就是需要手机客户端与服务端保持TCP长连接,服务端需要向客户端推送数据的时候可以随时通过这个长连接发送数据给客户端,这样便能做到客户端与服务端及时通讯甚至客户端与客户端及时通讯。做到这需要PHP能维持很多客户端连接,并且需要多进程支持,支持自己的通讯协议。这样的应用传统的nginx+php-fpm + 传统的php框架是做不到的。如果是长连接即时通讯类的服务器框架推荐一看下workerman,它是就是一个php的socket服务器框架,非常适合做手机后台服务器框架。

第二:如果不需要即时通讯的话,可以考虑直接走http协议,用nginx+php-fpm搭建一个webserver就好了,php框架可以采用thinkphp、yii等等,客户端需要与服务器通讯的时候向服务端get/post一个请求就好。

PHP可以做移动端吗

做移动端的后台

如果你只是指页面的话,

当然,php可以直接输出页面。

如何利用Thinkphp框架开发移动端接口详解

移动端接口只需要向客户端返回固定格式的数据就行,可以是 json 或者 xml ,建议使用 json,比较常用一点,下面给你举个例子,你就明白了。

比如写一个登陆接口

class LoginController

{

publixc function login()

{

$username = $_POST['username'];

$password = $_POST['password'];

$user = M("User");

$row = $user->where("username = '$username'")->find();

if($row)

{

if($row['password'] == md5($password))

{

$this->ajaxReturn(array('status'=>1, 'info'=>'登陆成功', 'data'=>null));

}

else

{

$this->ajaxReturn(array('status'=>0, 'info'=>'密码错误', 'data'=>null));

}

}

else

{

$this->ajaxReturn(array('status'=>1, 'info'=>'用户不存在', 'data'=>null));

}

}

}

ThinkPHP的方法类似于这样,返回json数据,客户端那边用 HttpUrlConnect使用 POST 方式 发送 username 和 password,就行了,客户端那边处理返回的json数据进行判断。

写了这么多,一个一个敲的,希望采纳一下

PHP开发与Web前端开发有什么区别

1、业务的应用场景不同

web前端开发主要指传统的PC端网页开发,页面主要是运行在PC端浏览器中,PHP开发出来的页面主要是运行在手机上。

直观上会感觉,PC端页面大一些,移动端页面小一些,但是根据开发经验,页面大可并不代表书写的代码复杂,页面小也并不意味着开发简单,难与易主要还是取决于具体的业务需求。

2、新技术的使用不同

由于在移动端主要以webkit内核为主,对于HTML5等新技术支持的更好,所以可以更大范围的使用新技术;而PC端开发由于很多场景下要求兼容IE等老版本浏览器,出于浏览器兼容性的考虑,有些情况下限制了新技术的使用。

3、页面的适配性不同

传统PC端的页面开发一般都会选择给页面设定一个固定宽度,两侧有留白,但是移动端的页面由于其载体手机屏幕比PC要小很多,一般都会选择尽可能多的在手机屏幕上显示内容,这就要求移动端页面要能够充分适应各种屏幕尺寸的手机并进行最大程度的利用。

4、页面的性能不同

PC端的网络情况一般比较稳定,都是通过网线或者Wi-Fi连接网络;但是移动端就比较复杂,除了Wi-Fi,还有2G、3G、4G甚至是在几种不同的网络连接中交替切换也经常发生。

不稳定的网络连接对页面性能带来的挑战是移动端的页面资源不能太大,否则在恶劣网络情况下时,页面将会无法访问 ,严重影响用户体验。

5、框架选型不同

由于移动端网络情况的不稳定,导致我们在移动端页面框架选型时,一般只考虑小而美的框架,例如像zepto.js这样的压缩之后只有9.6K,就能满足一般业务的需要,如果是想要构建更复杂的单页面应用,可以选择像vue.js这样的框架,功能强大,但体积压缩后却只有20多K。

而web端相对选择的范围就比较大,一些比较重型的框架也可以根据项目需求加以考虑,例如古老但庞大的ext.js,依然凭借着众多UI组件活跃在一些企业的后台管理系统项目中。

参考资料来源:百度百科—php

PHP可以做什么

PHP可以做什么

PHP属于后起之秀,吸收了java和c以及perl等语言优点,专注互联网领域。WEB领域PHP拥有得天独厚的优势,WEB领域没有语言可以和他比。将来一定是互联网的天下。互联网离不开WEB,WEB离不开PHP。那么PHP可以做什么?一起来看看PHP的用途吧!

PC端网站开发

60%全球互联网网站采用php技术,80%国内互联网网站使用php开发。这些网站包含购物网站,政府企业网站,QQ空间,论坛博客等等。

移动端微网站开发

移动设备的普及为移动互联网的快速发展奠定了基础!手机淘宝网站,手机京东网站等等, 微信公众号应用中的微网站。 将来微网站和公众号肯定会取代APP的地位!

APP后台开发

APP后台开发也是移动互联网发展的一个产物。大多数网站为了让用户在手机上能够得到更好体验效果,都加入开发APP的开发行列中。而PHP后端技术将会作为他们的不二选择。

PHP主要用来做网站开发,许多小型网站都用PHP开发,PHP是开源的,这是使得PHP经久不衰的原因。在电商、社区等方面,PHP具备非常成熟的开源代码和模板,因此使得PHP应用极为广泛。

php-fpm的安装目录

下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多。

centos等linux平台

1./usr/local/php/php

2./usr/local/php/etc/php.ini

3./usr/local/php/sbin/php-fpm

4./usr/local/php/etc/php-fpm.conf

mac平台

1./usr/bin/php

2./etc/php.ini

3./usr/bin/php-fpm

4./etc/php-fpm.conf

由于我开发以Mac为主,所以就用Mac的环境配置来学习。

php-fpm配置详解

这是搜索的一份还算算比较详细的php-fpm.conf配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:

1.pid = /usr/local/var/run/php-fpm.pid

2.#pid设置,一定要开启,上面是Mac平台的。默认在php安装目录中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid

3.

4.error_log  = /usr/local/var/log/php-fpm.log

5.#错误日志,上面是Mac平台的,默认在php安装目录中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log

6.

7.log_level = notice

8.#错误级别. 上面的php-fpm.log纪录的登记。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

9.

10.emergency_restart_threshold = 60

11.emergency_restart_interval = 60s

12.#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭).

13.

14.process_control_timeout = 0

15.#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

16.

17.daemonize = yes

18.#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

19.

20.listen = 127.0.0.1:9000

21.#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。

22.

23.listen.backlog = -1

24.#backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:

25.

26.listen.allowed_clients = 127.0.0.1

27.#允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。

28.

29.listen.owner = www

30.listen.group = www

31.listen.mode = 0666

32.#unix socket设置选项,如果使用tcp方式访问,这里注释即可。

33.

34.user = www

35.group = www

36.#启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。

37.

38.pm = dynamic

39.#php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand

40.#如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。

41.

42.#如果选择dynamic,则进程数是动态变化的,由以下参数决定:

43.pm.max_children = 50 #子进程最大数

44.pm.start_servers = 2 #启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2

45.pm.min_spare_servers = 1 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

46.pm.max_spare_servers = 3 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

47.

48.pm.max_requests = 500

49.#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

50.

51.pm.status_path = /status

52.#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到

53.

54.ping.path = /ping

55.#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。

56.

57.ping.response = pong

58.#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

59.

60.access.log = log/$pool.access.log

61.#每一个请求的访问日志,默认是关闭的。

62.

63.access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"

64.#设定访问日志的格式。

65.

66.slowlog = log/$pool.log.slow

67.#慢请求的`记录日志,配合request_slowlog_timeout使用,默认关闭

68.

69.request_slowlog_timeout = 10s

70.#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'

71.

72.request_terminate_timeout = 0

73.#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

74.

75.rlimit_files = 1024

76.#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。

77.

78.rlimit_core = 0

79.#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.

80.

81.chroot =

82.#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.

83.

84.chdir =

85.#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)

86.

87.catch_workers_output = yes

88.#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.

当然还有一些无关紧要的设置,用到了再说吧。

一些重要的设置

php-fpm进程分配

在之前的文章中就说过了。在fasgcgi模式下,php会启动多个php-fpm进程,来接收nginx发来的请求,那是不是进程越多,速度就越快呢?这可不一定!得根据我们的机器配置和业务量来决定。

我们先来看下,设定进程的配置在哪里?

pm = static | dynamic | ondemand

pm可以设置成这样3种,我们用的最多的就上前面2种。

pm = static 模式

pm = static 表示我们创建的php-fpm子进程数量是固定的,那么就只有pm.max_children = 50这个参数生效。你启动php-fpm的时候就会一起全部启动51(1个主+50个子)个进程,颇为壮观。

pm = dynamic 模式

pm = dynamic模式,表示启动进程是动态分配的,随着请求量动态变化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 这几个参数共同决定。

上面已经讲过,这里再重申一下吧:

pm.max_children = 50 是最大可创建的子进程的数量。必须设置。这里表示最多只能50个子进程。

pm.start_servers = 20 随着php-fpm一起启动时创建的子进程数目。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。这里表示,一起启动会有20个子进程。

pm.min_spare_servers = 10

设置服务器空闲时最小php-fpm进程数量。必须设置。如果空闲的时候,会检查如果少于10个,就会启动几个来补上。

pm.max_spare_servers = 30

设置服务器空闲时最大php-fpm进程数量。必须设置。如果空闲时,会检查进程数,多于30个了,就会关闭几个,达到30个的状态。

到底选择static还数dynamic?

很多人恐惧症来袭,不知道选什么好?

一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。

如果你的内存很大,有8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成dynamic是最好的,比如:pm.max_chindren = 8, 占用内存160M左右,而且可以随时变化,对于一半访问量的网站足够了。

慢日志查询

我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

这个时候,我们是可以开启慢日志功能的。

slowlog = /usr/local/var/log/php-fpm.log.slow

request_slowlog_timeout = 15s

当一个请求该设置的超时时间15秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。

php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:

1.[21-Nov-2013 14:30:38] [pool www] pid 11877

2.script_filename = /usr/local/lnmp/nginx/html/

3.[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/

通过日志,我们就可以知道第2行的file_get_contents 函数有点问题,这样我们就能追踪问题了。

;

关于php开发移动端的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php开发移动端 php相关的技术php移动开发技术的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did197215
更新时间:2023-04-26   阅读:16次

上一篇: php大括号怎么去掉 php去除换行

下一篇:php显示前台内容 php查看当前打开网页源代码

最新资料更新

  • 1.射洪php招聘 射洪平台公司招聘
  • 2.php技术都有什么 php技术
  • 3.郑州php业余培训 郑州php业余培训机构
  • 4.php用户检索记录系统 php搜索数据库
  • 5.php变下载文件 php 下载文件
  • 6.php提取数组转map php 数组转xml
  • 7.web安全php Web安全原理分析与实践
  • 8.php视频太大怎么传输 php上传视频压缩
  • 9.php教务系统网页设计 php教务系统网页设计方案
  • 10.phpstorm写前端 phpstorm写html
  • 11.php中文注释乱码 php注释语句
  • 12.怎么写php需求 php市场需求
  • 13.php有类似cmap 与php类似的语言
  • 14.扫描登录php代码 扫描登录php代码错误
  • 15.php每天更新数据 php数据库更新语句
  • 16.phpajix的简单介绍
  • 17.php菱形的输出 php输出菱形星号
  • 18.手机文件php怎么打开 手机php格式文件怎么打开
  • 19.php数据抓取实例 php采集数据
  • 20.JavaPHP你好 java welcome

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]