php怎么安装?php安装 图文教程 msi zip

 更新时间:2017年7月6日 23:50  点击:2368
本文教你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文件内容。

php怎么调试?本文介绍了调试PHP程序的多种方法,有兴趣的同学可以看看

调试的定义:通过一定方法,在程序中找到并减少缺陷的数量,从而使其能正常工作。
这里说一些如何调试PHP程序的经验。

一、PHP自带的调试功能

1、自带的报错功能

两个名词:开发环境是开发人员在进行开发和调试的环境,生产环境是最终客户在用的线上环境;
开发环境和生产环境要分开设置报错功能。

(1)开发环境

开发环境需要打开报错,以下是php.ini的配置项及其说明:

; This directive sets the error reporting level.
; Development Value: E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
error_reporting = E_ALL | E_STRICT

; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development.
; Development Value: On
display_errors = On

这样你在开发过程中,能第一时间发现错误。

即使是一个低等级的报错“Notice: Undefined variable: a in E:\phpspace\test.php on line 14”,但一个未定义的变量的使用往往暗藏着bug。

你会问,如果我引进了开源的类库,他们抛出一堆的低等级错误怎么办?一般代码质量好的类库,也没有“Notice”级别的报错的。所以这也是鉴别一个类库质量的方法。

(2)生产环境

生产环境不能直接将错误输出,而是记入日志,以下是php.ini的配置项及其说明:

; It could be very dangerous in production environments.
; It's recommended that errors be logged on production servers rather than
; having the errors sent to STDOUT.
display_errors = Off

; Besides displaying errors, PHP can also log errors to locations such as a
; server-specific log, STDERR, or a location specified by the error_log
; directive found below. While errors should not be displayed on productions
; servers they should still be monitored and logging is a great way to do that.
; Production Value: On
log_errors = On

; Log errors to specified file.
error_log = /path/to/php_error.log

当然日志写到文件里只是一个选择,还有其他配置可参考手册。

生产环境是给客户提供服务的,你不可能在上面进行断点、打印输出等操作,所以日志是不错的选择。

2、其他一些语言特性、功能的使用

(1)少用错误控制运算符“@”

其的作用是,将“@”放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

如果一个缺陷发生在这个表达式中,从PHP的输出中看不到任何错误,这增加了调试的难度。所以能不用则不用。

(2)有些函数自带有debug功能

比如这行代码:

$fp = fsockopen(“www.example.com”, 80, $errno, $errstr, 30);

开发者调试时已经确定,$fp为空,连接失败,是这一行有问题,但是为什么连接失败?

函数是php自带的,无法进行更深入的调试。所以一般这样的函数(主要是网络通信类的),会自己提供调试参数:$errno和$errstr。你可以加一句:

if (!$fp) echo “$errstr ($errno)
\n”;

就能看到连接失败的原因了。

这些函数有:fsockopen,pfsockopen,stream_socket_server,stream_socket_client 等。

还有些函数是调试一个功能用的,比如:mysql_errno,socket_last_error,socket_strerror 等。

这些只需要了解下,碰到能想到用即可。

二、引进调试工具

在遇到复杂问题时,可以借助调试工具。比较成熟的有Xdebug、ZendDebugger。

以Xdebug为例,它能够:控制打印输出的样式和数组层级、堆栈式的追踪错误、追踪函数调用、代码执行覆盖分析、程序的概要分析(Profiling)、远程调试。详见:http://xdebug.org/docs/。

Xdebug前两个功能是对PHP原有的调试功能做了改进,更方便调试。

复杂的问题,调试不出来的,可能是业务上的的问题,下面也有说业务逻辑的调试。

三、调试业务逻辑错误

当PHP脚本跑起来,没有任何错误,只能说它没有语法上的错误,但是不能说明它业务逻辑上没错误。

很多业务逻辑的错误并不会反映在语法错误上,但调试的思路和PHP自带调试功能差不多。

下面是一些方法。

1、最基本的调试方法

先确定两个东西:程序预期的结果、程序现在的不符合预期的结果;
寻找与两种结果相关的代码片段;
阅读这些代码片段,尝试以“肉眼”找出错误;
找不出,则需要输出一些关键变量,通过检查它们的值是否正确来判断是哪里发生了错误;
若干次尝试,最终你可以确定错误发生在哪个点。

你也可以借助Xdebug等工具,查看变量值的变化,或者设置断点进行调试。

2、记录运行日志

有些复杂或特殊的业务,用上面的方法不合适,比如:一个不能被打断的后台运行脚本。这些情况下记录运行日志比较合适。

记日志的点要有所选择,除了业务上比较重要的点,通常容易出错的地方有:网络连接和通信、系统权限问题等。

3、单元测试

以代码测试代码,而不是像第一点一样调试完会把测试代码丢掉。以测试驱动开发。

这个话题比较大,但适合放这里提一下。有兴趣的同学可以去了解。

四、调试非功能性的错误

非功能性错误,比如:内存溢出导致程序挂掉了、效率有问题导致程序非常慢、死循环了等等。

这些问题,用“肉眼”检查代码效率太低了。

所以可以借助调试工具做程序的概要分析(Profiling),从中检查出程序的瓶颈所在。

[!--infotagslink--]

相关文章

  • iPhone6怎么激活?两种苹果iPhone6激活教程图文详解

    iPhone6新机需要激活后才可以正常使用,那么对于小白用户来说,iPhone6如何激活使用呢?针对此问题,本文就为大家分别介绍Wifi无线网络激活以及iPhone6连接电脑激活这两种有效的方法,希望本文能够帮助到大家...2022-09-14
  • Painter绘制红衣喝酒男水粉画效果教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一说绘制红衣喝酒男水粉画效果的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • Photoshop制作雨中野外孤独行走的一头牛海报教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下制作雨中野外孤独行走的一头牛海报的教程,各位想知道具体制作方法的使用者们,大家就快来看一看小编给...2016-09-14
  • Painter绘制帅气卡通魔法王子漫画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制帅气卡通魔法王子漫画的具体教程,各位想知道绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • Illustrator鼠绘堆雪人的孩童矢量插画教程

    今天小编在这里就来给各位Illustrator的这一款软件的使用者们来说说鼠绘堆雪人的孩童矢量插画的教程,各位想知道具体绘制方法的使用者们,那么各位就快来跟着小编来看看...2016-09-14
  • llustrator绘制扁平化风格卡通警察护士空姐肖像教程

    今天小编在这里就来给llustrator的这一款软件的使用者们来说一说绘制扁平化风格卡通警察护士空姐肖像的教程,各位想知道具体绘制步骤的使用者们,那么下面就快来跟着小编...2016-09-14
  • PHP7快速编译安装的步骤

    编译安装非常的简单了我们现在的php版本已经到了php7了,下文小编来为各位介绍一篇关于PHP7快速编译安装的步骤,希望文章能够帮助到各位。 一、安装必要一些依赖 yum...2016-11-25
  • Illustrator绘制一个方形的录音机图标教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一下绘制一个方形的录音机图标的教程,各位想知道具体绘制方法的使用者们,那么下面就来看一下小编给大家分...2016-09-14
  • 美图秀秀给照片天空加蓝天白云教程一览

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下究竟该怎么给照片天空加蓝天白云的教程,各位想知道具体制作步骤的,那么下面就来跟着小编一起看看吧。 ...2016-09-14
  • 美图秀秀让你胸丰满起来处理教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下让你胸丰满起来的处理教程,各位想知道具体处理步骤的,那么下面就快来跟着小编一起看一下教程吧。 给...2016-09-14
  • photoshop给手绘画调色变换场景后期教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说说给手绘画调色变换场景的后期教程,各位想知道具体后期处理步骤的使用者们,那么大家就快来跟着小编来看...2016-10-02
  • Painter绘制雷神传插画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制雷神传插画的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看看绘制方法吧。 ...2016-09-14
  • Rstudio中安装package出现的问题及解决

    这篇文章主要介绍了Rstudio中安装package出现的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • photoshop简单制作一个搞笑的换脸表情包教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说一说简单制作一个搞笑的换脸表情包的教程,各位想知道具体制作方法的使用者们,那么大家就快来看一看教程吧。...2016-09-14
  • PHP编译安装后PHP-FPM使用笔记

    PHP-FPM我们相信各位用高版本的php经常使用到了,下面整理了一些关于PHP-FPM的笔记,有兴趣的可进来看看。 今天赶上了123System OPenVZ VPS全场半价的机会,购入了一...2016-11-25
  • MySQL中的联合索引学习教程

    联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进...2015-11-24
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • Linux安装Pytorch1.8GPU(CUDA11.1)的实现

    这篇文章主要介绍了Linux安装Pytorch1.8GPU(CUDA11.1)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-25
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24