php怎么学?新手应该如何学习 PHP 语言?

 更新时间:2017年7月6日 23:50  点击:1517
php怎么学?初学者该如何学习php?本文介绍了php的学习技巧和心得:有兴趣的同学快看看吧!

文章开头我想问一句话:PHP是做什么的?

因为这是面试中会问到的一个问题,虽然它看起来很简单。

回答做网站的,也就是个简单建站的水平。

回答做网站后端开发的,对PHP有了一定的认识。

回答做后端处理的,有了更深层次的认识。

学习一样技能,你得先清楚这项技能是到底做什么的,说到这里,我想大家都会简单的说是做网站的,因为PHP在WEB领域应用最为广泛,大多数网站都是用PHP做的。准确的说PHP是做网站的后端开发的,其实我这样说还不算正确,PHP只是做后端开发的,但不只是网站而已。就像现在比较火的APP开发也可以用PHP做后端处理。

PHP相对于其他语言,比较简单,相对好上手,比较适合零基础的人学习,但是就像我上面说的那样,PHP只完成了一个网站或者系统的一部分。

一个运行的网站或者软件系统可以分为前端页面,后端程序,数据库,linux。而处理后端的PHP仅仅是只占了四分之一,PHP本身的东西其实并不多,真正多的东西都在PHP之外,所以单纯的掌握PHP并不足已做出什么产品,可能连工作都找不到。

关于学习PHP,我想讲讲我的心路历程:
前端:

但凡是一个网站都必须得让人能看得见,使用得起来。任何一个网站可以没有数据库,可以没有后端程序,但是必须得有前端页面,而这也是最早期的网站形态—一 一个只能展示文字和图片等信息的静态页面。

掌握静态网页的制作技术是学习开发网站的先决条件。这里面的学习包括 HTML,css,javascript,它们可以直接使用浏览器运行。

HTML负责网页的结构,用它来规定网页排版中哪部分是文字,哪部分可以放图片,音频文件,视频文件放在网页中什么位置显示等。

CSS可以把这些文字,图片,视频等信息拥有一定的合理好看的样式,可以定义文字的大小,颜色,图片的大小等等。

javascript可以让网页与人产生交互,就像你登录网站,点击登录按钮就会跳转,把鼠标放到菜单,菜单就会自动展示下拉,逛淘宝时,把鼠标放在产品图片上,图片就会放大等等。

我的学习技巧和心得:

我算是零基础学习开发的吧,连大学都没上,没系统的学过计算机专业,初次开始学习html时,我是以w3c手册为学习教材,但是越往后看越觉得里面写的东西琐碎繁多,手册里介绍了很多标签,标签又有很多属性,它们各自又代表的什么含义。

就像下面的这个表示表格的一些标签,这是手册给出的概念,看了之后似乎也明白又不太明白,看完又没记住,回想起来,还是一头雾水,像是什么也没学到。



严肃说来,HTML是否被认为是“真正”的编程语言并不重要——它依然是一种需要学习的新技能。尝试新的东西是非常可怕的。你需要在处于这种未知的弱势地位时也敢于勇往直前,不要急头急脑一下子就想把东西学会,要沉得住气,踏踏实实的心态一点一点的来,而且失败和不确定也没有关系—— 事实上,它们都是成功的重要组成部分。

再说下js

在上面我已经阐述过了javascript,(简称js),但是在这里为什么还要再强调js呢?

因为很多人都说不用学js了,直接学jquery(简称jq)就行。jq是什么,jq是一种js的框架,它可以使开发速度更快,有很多做好的功能和特效,直接使用就行了。

但我并不同意光学jq,如果你想让自己能解决更复杂的问题,变得更有竞争力,或者只仅仅能更好的学习理解使用jq。那么请学习js!

上面说了jq是js的一种框架,它的本质还是js写的。js能完成的,理论上来说jq也能完成,但是并不是100%都能处理,而且jquery能做的,js 100%能完成。jquery只是工具简化操作,底层还是js。只有在学好原生js的基础上,才能更好的学习jquery或其它框架和处理前端问题。

后端:

到这里才说到我们的PHP。如果说HTML和css是看得见的部分,那么PHP就是看不见的部分。它负责在后面处理数据,然后返回给用户。

当网站由开始的静态页面发展到现在有了后端程序,那么网站才有了业务逻辑。简单的说,就像一台计算器,你在前端输入数据,然后点击提交,PHP给你处理运算,然后返回到前端,这时你就看到了结果。需要特别说明的是PHP并不能直接在浏览器中运行,它需要Apache环境支持,放在Apache服务器里面,然后用浏览器用访问,这个需要大家在学习过程中配置一下,非常简单。

我的学习技巧和心得

学习PHP我推荐韩顺平老师的《PHP从入门到精通》的视频教程,做PHP开发,包括有了解的同学可能都知道韩顺平老师,名气很大,它的这个教程几乎是每个PHP学子必看的精品教程。网上有很多这个教程的下载。其实韩老师不只是出了这一个教程,大家可以顺便搜一下每学网,每学网上有更多韩老师亲自做的其他教程。

我学习PHP时,慢慢的随着讲解的知识不断增多,不懂的问题也开始出现,刚开始时我就简单用脑子记着,想以后再解决。但是后来再回想,发现有一些竟然记不起来了,慢慢的,不懂的问题越积越多,我害怕遗忘掉我不想遗漏任何我没学会的地方,哪怕是一个暂时没细想,细想一下就能懂的简单问题。如果忘掉了,可能以后再也想不起来了,这对我来说是个很难弥补的损失,我是个完美主义者。

我想起了学习html时的教训,还是不能懒!我建立了一个文本,专门记载我不懂的,难以理解的,还有暂时没有解决的种种问题,甚至是灵机一动偶然想到的问题,也都统统不拉的记下来。

当我学完PHP后,再回头看,数一数大概百十条,这个文本我依然保留着:


我希望大家在学习的过程中也能养成写记问题的习惯,好记性不如烂笔头么,因为学习过程中难免会碰到很多不懂的问题,但是你又不能一直等着这个问题解决,你需要继续前进,而时间久了,你可能就会遗忘掉。

每学到一个脚本难点的时候,尝试对别人讲一遍,你能讲清楚才说明你真的理解了。

除了记问题,我还把老师讲的知识,用自己的话按自己的理解自己的话写下来,这就如同是跟别人讲一遍似得。记住,要用自己的话自己的思路写,忘记老师的原话,这样别人的知识才会转化成你的。

所以,这是我当时写的笔记:


写到这里,大家不要觉得我太麻烦,这样太慢,记住,思考要慢,慢的为了以后更快!

合理的“慢”,不是速度上的缺失,而恰是对“过快”的反思与矫正。慢是一种方法。尊重规律,沉下心来,追求质量,做起事来,严格有序,精益求精。

实践也是强化知识理解的过程

千万不要只看教程和学知识点,最重要的是实践,大多数人包括我,曾都是跟别人学起来像是学会了,到了自己做的时候却很难进行下去。

当你看完教程掌握了里面所述的内容后,可以按照老师讲的例子或者自己构思某个应用场景,然后从头写起。你会发现很多问题,也会加深对教程知识的理解。这样通过不断地练习和获取反馈,你的开发功底会很快提升。

MySQL数据库

当网站技术再往后发展时,人们需要网站处理存放更多的数据,来满足现实生活中的业务逻辑,这时候就需要数据库了。

数据库是什么,按字面的意思,数据库说白就是存放数据的地方,它可以是一段文字,一张图片或者一个文件的URL地址等等。比如,当你想浏览一篇文章时,你点击文章标题,这个请求会跳转到PHP文件那里,PHP再从数据库取出你想看的那篇文章。

PHP和数据库是密不可分的,PHP后来在网站开发中更多的任务就变成了操纵数据库了。数据库有很多种,准确的说咱的这个数据库是mysql数据库,只是因为php和mysql关系非常好,它们两个是完美的搭配。所以我们学习PHP开发学习的数据库就是MySQL数据库。

我的学习技巧和心得

学习mysql时,我同样采用了学习PHP时的学习方法:记问题,写笔记。

还是想在强调一遍:要用自己的话写,忘记老师的原话,这样别人的知识才会转化成你的。

同样,这也是当时我做的:


该通过做一个小项目强化一下了。比如去做一个文章或者商品管理系统,做做常用的增删改查。就像下面的添加这个商品功能页面,无非就是用PHP把前端用户填写的数据存放到数据库。


编程只会在最初的几天里是个有意思的事情,之后大多会出现厌烦厌学。所以兴趣并不能完全成为编程的动力。通过项目开发,你会发现更多的编程动力是生活中需要的实际需求和通过高强度高密度的学习和思考后解决需求后的强烈成就感。

框架:

框架说白了就是一个已经帮你完成了部分功能的程序部件结构。

基本上到了公司动手做起真实的项目中都是使用框架来开发的,它可以使你的开发速度更快。

为什么?就说网站开发吧,比如你要做网站中的验证码功能,你需要动手自己从0开始写,同样的,写一个文件上传程序,你需要动手从0开始写。

这时你会问,我做什么不都是要动手写的吗?

但是你忽略了一个问题,验证码,上传文件等等这些都是网站中几乎不可缺少的基本功能,每个网站都要用到,这时候你可以动手把这些常用的功能写好,然后封装起来,用的时候直接调用就行了,大大减少了代码的重复性,而这其实也就是框架了。

先别说自己做一个框架,因为完成一个好的框架不是一项简单轻松的工作,而且更需要高的知识技术水平。所以我们要学习使用别人做好的专业的框架,大都说中小型公司都是使用的别人的框架,PHP常见的有thinkphp, ci, yii,我个人推荐学thinkphp,这个是国人做的,轻量级,学起来更容易些,使用的公司也比较多。

MySQL优化技术:

当你学会了PHP,mysql的一些增删改查技术后,你可以尝试做一个简单的文章管理系统了,能发布,修改,和查看文章。

但是,你试想一下,会不会遇到这样一个问题:当你查看一篇文章,MySQL需要从文章表中寻找你需要的那一篇取出来,此时你的文章已经很多了,比如有一百万篇,或者一千万篇时,mysql再从里面找一篇文章是不是越来越耗时了,平常文章量少的时候也许1秒钟就能打开一篇文章,此时可能需要十来秒,你愿意等吗?用户愿意等吗?就像新浪网,腾讯网这样的大型新闻网站,如果用户看一篇新闻需要等很长时间,那能行吗?

所以我们要对mysql进行优化,让数据库尽量用更少的时间找到我们需要的东西。

在这里就不讨论具体的技术细节了,

优化手段主要包括:

1,表的设计                                                  (可以减少数据的冗余,节省磁盘的开销)

2,mysql的索引优化                                      (利用索引,可以加快查询数据的速度)

3,mysql的查询优化。                                    (加快查询的速度)

4,分区分表                                                    (把一个大表分成几个小表,提高查询的速度)

大家在后来的学习中可以参照我介绍的这几个。

那么我学习mysql优化看的也是韩顺平老师的教程,叫做《韩顺平 大型门户网站Mysql优化技术》

地址:每学网 韩顺平 大型门户网站Mysql优化技术(完整版)【限时特价课程,独家配权威的PPT 课堂笔记 练习题】

页面静态化技术:

当你学会了MySQL优化技术,切不要沾沾自喜,新的问题的依然很多。

可以再试想一下:一个人访问时,和大量的人访问时?当你一个人访问也许很快,但是大量的人访问,mysql要处理大量的请求,它是忙不过来的,mysql支持的请求数是有限的,这很容易理解吧。

假如它一次只能处理100个请求,当超过100个人时,其他的用户是不是就要等着,这样速度又降下来了,如同上面举的新浪和腾讯网的例子,用户是等不了的。

怎么办?一个很好的解决方案是采用静态化技术。

为什么要采用静态化,就是把数据库的数据生成一个文件,用户第一次访问时,mysql依然从数据库里面取,当第二次乃至以后更多次的访问时就直接访问这个静态文件了,不再劳烦数据库了,这样就减轻了服务器的压力了。

推荐教程: 《韩顺平 大型门户网站页面静态化技术(完整版》

地址:imeixue.cn/Course-Index

Linux
我们的程序,数据库,整个网站终归都是放在linux系统的服务器上的,对于一般的程序员能做到基本的配置即可。基本命令、操作、启动、基本服务配置(包括rpm安装文件,各种服务配置等);会写简单的shell脚本和awk/sed 脚本命令等一般公司有相应的运维人员管理。如果对这个有兴趣,后期可以继续深挖。

非关系型数据库Redis/Memcached

怎么又是数据库?,不是已经讲过了mysql了?是的,上面咱们说的mysql是关系型数据库,所以这两个叫做非关系型数据库。

为什么需要它们?

与mysql不同的是Redis和Memcached 的数据是放在内存中的,mysql是放在磁盘中的,而访问内存中的数据速度要远大于放在磁盘中,这就是它们的好处。

那为什么还要学习MySQL,干嘛不直接学习使用Redis和Memcached?

因为:MySQL更适合海量存储数据,Redis和Memcached是在内存中的,需要很大的内存才行,而且放在内存中的数据也容易丢失,如果机器故障重启内存就释放了。

一般互联网公司大都采用MySQL + Redis,或者 MySQL +Memcached的方式进行架构;Redis/Memcached都是基于内存的,所以它们的速度非常快,包括读和写都很快,一般用在一些高并发,大数据量访问的场景之下。

推荐视频教程:《韩顺平 大型门户网站Memcached缓存技术(完整版)独家配权威的PPT 课堂笔记 练习题》

地址:每学网 韩顺平 大型门户网站Memcached缓存技术(完整版)【限时特价课程,独家配权威的PPT 课堂笔记 练习题】

《韩顺平 Redis经典入门视频课程》

地址:每学网 韩顺平 Redis经典入门视频课程

说到最后,总之,学习PHP并不难,难的是一个体系。我写的总体比较基础,主要是针对一些刚入门学习的同学,在整体上给建立一个完整的知识体系。

**************************************************************************************************

在这条路上,可能尽管你如此努力,可还是会遇到你难以理解的问题。同样,我自己曾经连续半个月失眠,为了考虑解决那些棘手的问题。

我想让你知道的是:

要想确切地掌握编程语言的每一个特质是不可能的——它们是野性难驯的猛兽,如果你认为编程是一种易于学习的简单技能,那可能就会南辕北辙。作为一个程序员,需要学习的东西是无限的,并且一种不能满足的持久遗憾感,即使是该领域的专家也时常会有。

不用担心,知道了这些,把心态放正,一步一步的来,不要试图一下子掌握所有内容,设定那种如 “我要学习如何编写代码”这种不明确的目标——目标应该更具体,并将任务分解成更小的任务。不要放弃,吸取知识是擅长它的第一步骤,一定要给自己信心,尝试用更多的方式去考虑一个问题。

俗话说得好:无论你认为自己能做到,还是认为自己做不到…..就要看你怎么暗示自己了,这是我经常的借口:

我之所以不明白这一点,是因为我有一个创造性的大脑。而编程是逻辑性的,我的大脑只是不习惯这种思维方式!

在整个学习过程中,我希望大家:

不要相信任何‘神话’,学会自己思考。

不要墨守成规,大部分人知道的事情可能都是错的。

不要相信网上的传言,敢于提出质疑,去测试,根据实践做决定

本文教你PHP手工安装或者使用安装程序安装,非常实用,不会的同学快来看看吧!

PHP:手工安装或者使用安装程序安装。(以php5.2.17为例)

Windows 下的PHP,可以在http://windows.php.NET/download/ 下载。

打开该页面,我们会看到

前面的VC6和VC9是什么意思呢?从该网页的侧边栏英文注释我们可以知道答案。

Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

If you are using PHP with IIS you should use the VC9 versions of PHP

VC6 Versions are compiled with the legacy Visual Studio 6 compiler

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.

在这里我们选择和Apache相关联的vc6。而V6版本中又分为.zip版和Installer(msi)版本。这2个是什么意思呢?

Installer版本表示图形化安装程序安装.zip表示是手动安装
Installer版本 不包含任何外部的 PHP 扩展(PHP_*.dll),例如MySQL的扩展,没有这个扩展,php就无法与mysql连接。
如果需要,可以在 Windows ZIP 包和 PECL 中找到。
注:虽然 Windows 安装程序是让 PHP 工作的最容易的方法,但是它有很多限制。
例如,它不支持自动安装 PHP 扩展。使用安装程序安装 PHP 不是最好的方式。

警告:请注意,这种安装方式安装的 PHP 不是安全的。
如果需要一个安全的 PHP 设置,最好使用手动方式安装,并手动设置好每个选项。
手工安装

虽然目前有很多多合一的安装包,而且也发布了一个 Microsoft Windows 的 PHP 安装程序,但是仍然

建议用户花些时间自己手动安装 PHP。
因为这样才可以更加了解这套系统,并能够在需要的时候更方便的安装 PHP 扩展dll文件。
下面详细介绍php的安装和Apache加载php。

把解压的 php 重命名为 php5. 并复制到C 盘目录下. 即安装路径为 c:/php5
1   找到php 目录下的 php.ini.recommended ( 或者php.ini-dist) 文件, 重命名为 php.ini
必须只能复制到系统盘的windows 目录下( 以c:/windows 为例). 因为这是php 规定的。从最后的phpinfo.php 文件可以看到这个。
我复制到原目录下 后,结果导致无法连接到数据库。出现如下错误:

Fatal error : Call to undefined function mysql_connect() in D:/public_html/testMysql.php on line 6

我们从 phpinfo.php 中看到 Configuration File Path 的值是 C:/WINDOWS 。这是 PHP 规定的,但是经我测试,没有将 php.ini 放到 windws 下,导致 Loaded Configuration File 的值是 none ,正常情况下是 C:/WINDOWS/php.ini 
2   再把php 目录下的php5ts.dll,libmysql.dll 复制到目录 c:/windows/system32 下.

注意:CGI 和 CLI 可执行文件以及 web 服务器模块都需要 php5ts.dll 。

要让 php5ts.dll 能正确被搜索到,有下面三个选择:①复制该文件到 Windows 系统目录,②复制该文

件到 web 服务器的目录,③把 PHP 目录(例如 d:/PHP )添加到 PATH 环境变量中。为了将来更好的

维护,建议使用最后一个选择,将 PHP 目录添加到 PATH 环境变量中,因为这样更便于将来升级 PHP 。但我之前用的是第一个选择。
编辑php.ini 文件

打开c:/windows/php.ini 文件
1 设置扩展路径
查找 extension_dir 有这么一行
extension_dir = "./"
将此行改成
extension_dir = "C:/php5/ext" 
其中C:/php5 是你安装php 的路径. 路径不正确将无法加载dll 
( 注意: 有些php 版本是 ;extension_dir = "./" 要把前面的分号去掉)
2 分别查找 
;extension=php_mbstring.dll
;extension=php_gd2.dll
;extension=php_mysql.dll
把上面3 项前面的分号去掉, 这样php 就可以加载这些dll 了,从哪里加载,从上面extension_dir="C:/php5/ext" 所指定路径中加载。

  如果没有加载 php_gd2.dll  php 将不能处理图像. 没有加载php_mysql.dll php 将不支持mysql 函数库
php_mbstring.dll 在后面使用phpmyadmin 时支持宽字符

当然,还有另外一种加载方法:把php5/ext 目录下的php_gd2.dll,php_mysql.dll,php_mbstring.dll 文件复制到c:/windows/system32 下
这2 种方法经过我的测试,都是可以的。( 大家以后

以后要加载一些dll, 比如说php_mysqli.dll, 也就懂得怎么加载了,2 种方法都是可以的)
3 设置会话保存路径
查找session.save_path 有这么一行
;session.save_path = "N;/path"
在此行后加入一行( 注意是加入一行, 不是加到后面 )
session.save_path = "C:/WINDOWS/Temp" 
保存到你的临时目录下, 这里完全可以保存到windows 临时目录Temp 下
4 还有比较值得注意的是 short_open_tag . 有一些php 版本默认是Off 的.
也就是说 php 不能使用短标记如  必须使用
由于短标记使用方便, 并且很多程序也是用短短标记来写, 如discuz 等
如果不把 short_open_tag 改成On 将出现的症状将很难判断是上面原因, 这里建议修改 
查找
short_open_tag = Off
改为
short_open_tag = On
5 是否显示错误 display_errors 
出于安全性考虑,display_errors 有些版本也默认为 Off.
就是说在调试时, 如果php 代码有误, 就只出现一个空白页. 而不会显示出错原因和出错行数.
这样调试起来将非常不便, 建议根据自己需要修改
查找
display_errors = Off           ( 注意不是 ; - display_errors = Off           [Security])
改成
display_errors = On
6 显示NOTICE 敬告提示
第五步虽然打开了出错提示, 但出错报告还受到 error_reporting 的控制.
php5 默认关闭NOTICE 敬告提示, 如果是在本地调试, 建议打开NOTICE 敬告提示.
查找
error_reporting  =  E_ALL & ~E_NOTICE
改成
error_reporting  =  E_ALL
另外提示一下, 在程序中也可以通过error_reporting() 控制错误报告输出, 具体怎么用大家参考下手册.
7 register_globals
出于安全性考虑它默认也是Off
当register_globals=Off 的时候, 下一个程序接收的时候应该用$_POST['user_name'] 和$_POST['user_pass'] ) 
当register_globals=On 的时候, 下一个程序可以直接使用$user_name 和$user_pass 来接受值. 
更详细的说明请参考
http://www.phpfans.net/bbs/archiver/?tid-234.htm 
建议根据自己需要修改 . 这里不建议修改, 毕竟存在安全隐患.
8 php5 时差问题
 时间相差八小时
为什么呢?PHP5 系列版本新增了时区设置, 默认为格林威治时间, 与中国所在的东8 区正好相差8 个小时
查找date.timezone 有这么一行
;date.timezone =
将; 去掉, 改成
date.timezone = PRC 
其中PRC :People's Republic of China 中华人民共和国, 
更详细解决方法请参考本论坛的
http://www.phpfans.net/bbs/archiver/?tid-60.html

配置Apache 让Apache 加载配置好的PHP
1 打开apache配置文件http.conf
2 修改网站根目录(个人意愿)
查找DocumentRoot 有这么一行
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
这就是你网站的根目录, 你可以修改, 也可以用默认的. 如果改, 还要修改下面这项, 否则可能会出现 403 错误
查找  This should be changed to whatever you set DocumentRoot to
在它下面两行有

把上面两项的 C:/Program Files/Apache Group/Apache2/htdocs 改成你想要的目录
3 查找  DirectoryIndex index.html
修改成
DirectoryIndex index.html index.html.var index.php 
这样index.php 可以充当默认页面了
4 Apache 中模块化安装php
查找 # LoadModule foo_module modules/mod_foo.so
在此行后加入一行
LoadModule php5_module C:/php5/php5apache2_2.dll
( 其中C:/php5/php5apache2_2.dll 是你安装php 的相应路径.
注意不要把php5apache2_2.dll,php5apache2.dll 和php5apache.dll 混淆.php5apache.dll 只适用于apache 版本1 的.
PHP5 压缩包里的php5apache2.dll 只适用于apache2.0.* 版本, 如果是2.2.* 以上版本, 必须使用php5apache2_2.dll. 否则就可能会出现
"Cannot load C:/php/php5apache2.dll into server: The specified module could not be found." 
或者:
"The requested operation has failed" 
的情况. 关于这个问题的解决方法可以参考本论坛的
http://www.phpfans.net/bbs/viewt ... &extra=page%3D1 
不过php5apache2_2.dll 出来之后也就没有多少参考价值了)
5 查找 AddType application/x-gzip .gz .tgz
在此行后加入一行
AddType application/x-httpd-php .php 
这样apache 就可以解释php 文件了 
到这里配置基本完成了
######## 重启apache #########
在网站根目录下创建一个 phpinfo.php 文件
<?php
phpinfo();
?>
在浏览器打开
http://localhost/phpinfo.php
如果出现php信息, 则说明php 已经配置好了

php怎么写api接口?本文介绍了php写api接口的实例代码,有兴趣的同学可以参考一下。

http://localhost/openUser.php?act=get_user_list&type=json
在这里openUser.php相当于一个接口,其中get_user_list 是一个API(获取用户列表),讲求返回的数据类型为JSON格式。
你只需要在你PHP代码中执行这条链接他就会返回。
GET方式的直接使用 
$file_contents = file_get_content('http://localhost/openUser.php?act=get_user_list&type=json')
POST方式得用下面的(需要开启PHP curl支持)。 
$url = 'http://localhost/openUser.php?act=get_user_list&type=json';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交
$file_contents = curl_exec ( $ch );

curl_close ( $ch );

 在PHP 中编写接口

一、先简单回答两个问题:
1、PHP 可以开发客户端?
答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发。(别去纠结 GTK、WinBinder)
2、为什么选择 PHP 作为开发服务端的首选?
答:跨平台(可以运行在UNIX、Linux、WINDOWS、Mac OS下)、低消耗(PHP消耗相当少的系统资源)、运行效率高(相对而言)、MySQL的完美搭档,本身是免费开源的,......
二、如何使用 PHP 开发 API(Application Programming Interface,应用程序编程接口) 呢?
做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),
1、和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET 也许是 POST,这个需要开发团队相互之间约定好,或者制定统一规范。
2、有了参数,根据应用需求,完成数据处理,例如:任务进度更新、APP内购、一局游戏结束数据提交等等
3、数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:任务状态、内购结果、玩家信息等等
数据怎么返给客户端?
直接输出的形式,如:JSON、XML、TEXT 等等。
4、客户端获取到你返回的数据后,在客户端本地和用户进行交互
临时写的一个简单 API 例子:

  1.  

  2.  代码如下 复制代码
  3. <?php

  4. $output = array();

  5. $a = @$_GET['a'] ? $_GET['a'] : '';

  6. $uid = @$_GET['uid'] ? $_GET['uid'] : 0;

  7.  

  8. if (empty($a)) {

  9.     $output = array('data'=>NULL, 'info'=>'坑爹啊!', 'code'=>-201);

  10.     exit(json_encode($output));

  11. }

  12.  

  13. //走接口

  14. if ($a == 'get_users') {

  15.     //检查用户

  16.     if ($uid == 0) {

  17.         $output = array('data'=>NULL, 'info'=>'The uid is null!', 'code'=>-401);

  18.         exit(json_encode($output));

  19.     }

  20.  

  21.     //假设 $mysql 是数据库

  22.     $mysql = array(

  23.         10001 => array(

  24.             'uid'=>10001,

  25.             'vip'=>5,

  26.             'nickname' => 'Shine X',

  27.             'email'=>'979137@qq.com',

  28.             'qq'=>979137,

  29.             'gold'=>1500,

  30.             'powerplay'=> array('2xp'=>12,'gem'=>12,'bingo'=>5,'keys'=>5,'chest'=>8),

  31.             'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17),

  32.             'ctime'=>1376523234,

  33.             'lastLogin'=>1377123144,

  34.             'level'=>19,

  35.             'exp'=>16758,

  36.         ),

  37.         10002 => array(

  38.             'uid'=>10002,

  39.             'vip'=>50,

  40.             'nickname' => 'elva',

  41.             'email'=>'elva@ezhi.net',

  42.             'qq'=>NULL,

  43.             'gold'=>14320,

  44.             'powerplay'=> array('2xp'=>1,'gem'=>120,'bingo'=>51,'keys'=>5,'chest'=>8),

  45.             'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17),

  46.             'ctime'=>1376523234,

  47.             'lastLogin'=>1377123144,

  48.             'level'=>112,

  49.             'exp'=>167588,

  50.         ),

  51.         10003 => array(

  52.             'uid' => 10003,

  53.             'vip' => 5,

  54.             'nickname' => 'Lily',

  55.             'email' => 'Lily@ezhi.net',

  56.             'qq' => NULL,

  57.             'gold' => 1541,

  58.             'powerplay'=> array('2xp'=>2,'gem'=>112,'bingo'=>4,'keys'=>7,'chest'=>8),

  59.             'gems' => array('red'=>13,'green'=>3,'blue'=>9,'yellow'=>7),

  60.             'ctime' => 1376523234,

  61.             'lastLogin'=> 1377123144,

  62.             'level' => 10,

  63.             'exp' => 1758,

  64.         ),

  65.     );

  66.     

  67.     $uidArr = array(10001,10002,10003);

  68.     if (in_array($uid, $uidArr, true)) {

  69.         $output = array('data' => NULL, 'info'=>'The user does not exist!', 'code' => -402);

  70.         exit(json_encode($output));

  71.     }

  72.  

  73.     //查询数据库

  74.     $userInfo = $mysql[$uid];

  75.     

  76.     //输出数据

  77.     $output = array(

  78.         'data' => array(

  79.             'userInfo' => $userInfo,

  80.             'isLogin' => true,//是否首次登陆

  81.             'unread' => 4,//未读消息数量

  82.             'untask' => 3,//未完成任务

  83.         ), 

  84.         'info' => 'Here is the message which, commonly used in popup window', //消息提示,客户端常会用此作为给弹窗信息。

  85.         'code' => 200, //成功与失败的代码,一般都是正数或者负数

  86.     );

  87.     exit(json_encode($output));

  88. } elseif ($a == 'get_games_result') {

  89.     //...

  90.     die('您正在调 get_games_result 接口!');

  91. } elseif ($a == 'upload_avatars') {

  92.     //....

  93.     die('您正在调 upload_avatars 接口!');

  94. }

  95.  

复制代码

点击测试(对于客户端而言,也是直接调用这样的地址):
http://www.ezhi.net/api/test/index.php
http://www.ezhi.net/api/test/index.php?a=get_users
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10001
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10002
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10003
三、实际项目中,我们在开发 API 应该注意的几个事项(仅供参考):
1、单文件实现多接口的形式有很多种,例如:if..elseif.. 或 switch 或 动态方法 (也就是TP的这种访问函数体的形式)
2、对于数据的输出最好用json,json具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式
3、接口安全,一定要增加接口验证。例如,客户端和服务端针对不同接口统一做好加密方式,服务端在对于每次接口需要都要进行验证。以保证防止接口被恶意刷新或黑客恶意调用,尤其是大型商业应用。
4、对于线上的 API 必须保证所有接口正常且关闭所有的错误信息 => error_reporting(0),在输出JSON 时,不能有任何其它输出,否则,客户端将解析数据失败,直接 Crash!
5、开发 API 和 WEB 有一定的区别,如果是 WEB 的话,可能代码出错了,不会导致特别严重的错误,也许只是导致数据写入和查询失败,也许导致 WEB 的某个部分错位或乱码。但如果是 API,直接 Crash!
6、做接口开发,不建议使用框架开发,原因概括起来有两点(其实我有点冒风险的,本人也是 TPer 一枚,毕竟这是TP的官网):
&emsp;&emsp;1)客户端一般对服务端的响应速度有极高要求,因此,使用最原生态的 PHP 完成接口开发,是最高效的,假如用到了框架,还需要加载各种不需要多余的文件,就好比夏天穿了件冬天的衣服。试想,你在玩手机的时候,使用一个应用随便一个操作,等半天才有动静,你受的了吗?
&emsp;&emsp;2)就是上面第4点提到的,框架对于WEB开发,是件很幸福的事,但对于 API 而言,你实在不敢想象它会给你出什么岔子!最后你将痛苦不堪~~因为很多框架都是为 WEB 诞生的(我也很期待有一天能看到专门为开发 API 而生的框架或者扩展)
&emsp;&emsp;这个也有人纠结,接口效率与稳定性,还得看编码的人,有的人可能写的还不如框架跑的快,也有人觉得用框架没什么问题,这里只是建议,关键看自己的实际情况,同时建议代码上线前压测一下
&emsp;&emsp;说到这,不得不说扯一下,腾讯微博淘宝等开放平台。其实那些开放平台,所谓的开放,就是给你提供一个这样的接口,你根据他们提供的技术文档,按他们制定的格式和要求,调它们提供的接口文件(一般都是返回JSON或者XML),你就可以获取到他们的相关信息,例如:QQ用户基本信息、淘宝店铺、商品消息等等。然后在根据这些消息,在你的应用里完成交互。
&emsp;&emsp;其实,ajax 也是调用 API 的接口。

php文件相信很多电脑老手也不知道吧?本文教你用什么软件打开php文件,不知道的同学赶快来看看吧!

php文件相信很多电脑老手也不知道吧?今天有一聚教程网网友问了编辑这个问题:“php文件怎么打开?”,其实大家并非是需要去打开php文件,多数只是因为下载东西,错误的下载到成了网页文件,主要是下载站中的下载连接其实是php脚本文件控制的,有的不支持一些下载工具下载,防止大量占用网站服务器资源,当使用讯雷下载的连接就会失效,也可能是服务器链节地址失效,导致下载到的东西只是也个php脚本文件,根本不是你要查找的相关资料,不信大家可以使用记事本打开,里面全部是php英文语法脚本,解决办法大家可以使用目标另存为下载即可。

下面简单介绍下什么是php文件,PHP是一种服务器端HTML-嵌入式脚本描述语言。 其最强大和最重要的特征是其数据库集成层,使用它完成一个含有数据库功能的网页是不可置信的简单。在HTML文件中, PHP脚本程序(语法类似于Perl或者c语言)可以使用特别的PHP标签进行引用, 这样网页制作者也不必完全依赖HTML生成网页了。由于PHP是在服务器端执行的, 客户端是看不到PHP代码的。 PHP可以完成任何CGI脚本可以完成的任务,但它的功能的发挥取决于它和各种数据库的兼容性。 PHP除了可以使用HTTP进行通信,也可以使用IMAP, SNMP, NNTP, POP3协议。

下面为大家列出电脑百事网程序中的一个php文件给大家看看:

php文件怎么打开?
php文件怎么打开?

php文件怎么打开,其实需要编程软件才可以打开,因为.php文件是一个网页脚本程序, 专业人士可以使用Dreamweaver 网页制作软件或者编程软件都可以打开,并进行编辑,对于多数不需要用到的朋友可以使用记事本打开,方法是将鼠标放在php文件上如上图---鼠标右键---选择打开方式----选择记事本打开即可,如下图:

php文件打开方式 -记事本打开

 

打开了之后,效果就是上上图中的英文脚本程序了,一般用户也看不懂,编辑因为接触,脚本程序的含义还是知道的,当你下载的是一个类似于asp或php的链接文件时,最终跳转下载的不是下载地址例如后缀类似于rar的文件时,说明您下载存在问题,其原因是你使用的是下载工具下载,但该网站限制下载工具下载,也可能是网站下载链接地址失效,总之下载到是php文件说明您下载失败了,要打开使用记事本可以查看php文件内容。

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • 学习 Vue.js 遇到的那些坑

    这篇文章主要介绍了学习 Vue.js 遇到的那些坑,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-02-04
  • PHP简单实现生成txt文件到指定目录的方法

    这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
  • php判断邮箱地址是否存在的方法

    这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03