原因分析
如果你程序有问题而我们执行时没有提醒错误,那么有几种可能
1.php.ini中错误提醒功能关闭,我们只要开启即可
找到display_errors = On 修改为 display_errors = off
2.在php程序相关页面也加了关闭错误报错功能,我们去掉相关代码即可
ini_set("display_errors", "On");
当然如果你没有权限来做这些操作我们可以使用echo 排查法来解决
代码如下 | 复制代码 |
<?php $action = $_GET['id']; if($action == '') $action = 1; if($action == 1) { echo("/$action's value is 1"); } else if($action == 2) { echo("/$action's value is 2"); } ?> |
如上图所示我们可以利用条件来判断当前所在位置 ,然后 一步步排查导致页面空白问题。
const
用来定义那些在运行时不能被改变的常数值。一旦定义且不能改变其值,假如在程序中改变了它的值,那么会出现错误。
代码如下 | 复制代码 |
<?php |
前面没有美元符号($),可以在不需要初始化该类的情况下实用。常量值必须是一个常量表达式。const定义的变量,在子类中可以被覆盖。
在类的内部定义,php5.3以后也可以在类的外部定义。
const不可以用表达式。
define()
可以用 define() 函数来定义常量。一个常量一旦被定义,就不能再改变或者取消定义。
常量只能包含标量数据(boolean,integer,float 和 string)。
可以简单的通过指定其名字来取得常量的值,不要在常量前面加上 $ 符号。
define定义全局常量,在任何地方都可以访问。
define不能在类中定义而const可以。
define可以采用任何表达式。如define('BIT_5', 1 << 5);
代码如下 | 复制代码 |
<?php |
define()与const()两者之间的区别:
内存空间的分配上。define进行宏定义的时候,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型,语句结构等,即宏定义常量只是纯粹的置放关系,如#define null 0;编译器在遇到null时总是用0代替null它没有数据类型(还有疑问请找C语言书籍看预处理部分或者看MSDN.而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查,所以const与define之间的区别在于const定义常量排除了程序之间的不安全性.
define定义全局常量,在任何地方都可以访问
const用于类成员变量定义,只能用类名访问不能更改要是初学这样显理解着就行别太钻牛角尖就行
static
php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。
static关键字在类中,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例。
static的成员,必须使用self来访问。
代码如下 | 复制代码 |
class Counter |
最后补充一个例子:
代码如下 | 复制代码 |
<?php
class test { public static function set_name() { public static function set_name2() { // 1 // 2 // 3 // 4 // 5 // 6 // 7 |
如我先做个测试我们php.ini
代码
代码如下 | 复制代码 |
$ch = curl_init(); |
错误提示
Fatal error: Call to undefined function curl_init() in E:/www/test.php on line 4
这个是告诉我们函数未定义了,这是php内置函数怎么可能未定义了呢,我们查看php.ini文件,发现如下状态
;extension=php_curl.dll
这个是未开启状态了,我们先去掉前面的;号了
extension=php_curl.dll
再重启apache然后再运行代码效果如下
//成功访问了www.111cn.net网站了
总结,其实使用curl是非常的简单的我们只要在php.ini中把extension=php_curl.dll前面的;号去掉即可。
const是用于类成员常量的定义了,定义之后不可改,而define我们定义的是全局常量了, 这样我们在其它地方访问但不能改变了,具体还有一些细节我们下面给各位列出来吧注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问
1、const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。
2、define不能在类中定义而const可以。
3、const不能在条件语句中定义常量
4、const采用一个普通的常量名称,define可以采用表达式作为名称。
5、const只能接受静态的标量,而define可以采用任何表达式。
6、const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量
7.使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。
define是定义常量的,如果在类中定义常量呢?当然不能用define,而用const,如下例:
代码如下 | 复制代码 |
<?php |
一般是define在类外定义常量,const在类内定义常量,并且const必须通过类名::变量名来进行访问。但是php5.3以上支持类外通过const定义常量,看如下,这样是ok的:
代码如下 | 复制代码 |
|
关于常量的基础知识,这里不说了,除了以上,define和const的其它区别(摘自网络):
1.const不能再条件语句中定义常量,但是define是可以的,如下:
代码如下 | 复制代码 |
<?php if(1){ const a = 'java'; } echo a; //必错 ?> |
2.const采用一个普通的常量名称,define可以采用表达式作为名称
代码如下 | 复制代码 |
|
3.const只能接受静态的标量,而define可以采用任何表达式。
代码如下 | 复制代码 |
<?php const PHP = 1 << 5; // 错误 define('PHP', 1 << 5); // 正确 ?> |
4.const本身就是一个语言结构。而define是一个函数。所以使用const速度要快的多。
两个共同步:两者都是不能进行重新赋值。
一个合格的程序员在实现数据入库中时我们都会有一些非常严密的过滤与数据规则了,像我们文件上传时在前段要判断用户是否选择上传文件同时在后台也可判断是否有上传的文件了,下面我们就一起来看看相关例子吧。如下html代码如
代码如下 | 复制代码 |
<formaction="?"method="post"enctype='multipart/form-data'> |
我们最常用的在前端简单的进行判断
代码如下 | 复制代码 |
<script> |
如果要做真正的安全我们需要在后台进入判断处理
代码如下 | 复制代码 |
<?php |
安例分析
js判断是比较笼统了我们只是使用了file=document.getElementById("file").value;来判断file有没有值或不为空了,这样只要输入一个数字就可以直接提交了,所以我们需要进入如上传文件的用户名限制
如
代码如下 | 复制代码 |
functionCheckWorkFile() |
对于php处理我们也只使用了if(!empty($_FILES['file']['tmp_name'])){来判断不为空了,其实这样也是不合理的
如我们可以如此处理
代码如下 | 复制代码 |
function file_type($filename) //Fix return $fileType; echo file_type('start.php'); // 6063 or 6033 |
这样我们可以限制上传文件类型的同时也给程序做了一个安全处理了哦