. php中单双引号的区别
"" 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
'' 单引号里面的不进行解释,直接输出。
1.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:
按值传递时,产生一个副本。对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
2. 在PHP中error_reporting这个函数有什么作用?
error_reporting() 设置 PHP 的报错级别并返回当前级别。
3. error_reporting(2047)什么作用?
答:PHP 显示所有错误 E_ALL
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
4. session与cookie的区别?
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的一般用于后台和安全性比较高的地方。
cookie:是存储在客户端,对于Cookie来说是存储在用户浏览器下面的,一般用户登陆,负载压力比较大的地方。可以减轻服务器的负载。
5. 表单中 get与post提交方法的区别?
1、get是发送请求HTTP协议通过url参数传递进行接收而post是实体数据,可以通过表单提交大量信息.
2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。
3. 受url长度限制,get传输的数据量小,而post可以传输大量的数据。
6. 数据库中的事务是什么?
是指作为单个逻辑工作单元执行的一系列操作。
数据库事务的ACID属性:原子性,一致性,隔离性,持久性
7. 4. echo count("abc"); 输出什么?
答:"1"。
count —计算数组中的单元数目或对象中的属性个数。如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。mode 的默认值是 0。count() 识别不了无限递归。
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
$result = count($b);
// $result == 3;
$result = count(null);
// $result == 0
$result = count(false);
// $result == 1
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
veggie' => array('carrot', 'collard','pea'));
// recursive count
echo count($food, COUNT_RECURSIVE); // output 8
// normal count
echo count($food); // output 2
?>
8. 用PHP写出显示客户端IP与服务器IP的代码
$_SERVER[“REMOTE_ADDR”] 和 $_SERVER[“SERVER_ADDR”]
9. Php代码
<?php
$hosts = gethostbynamel('');
echo $hosts[0];
?>
gethostbyname() 返回 IP 网址,返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针. 返回值: 字符串
gethostbynamel 返回机器名称的所有 IP。若一个机器名称有很多个 IP 位址 (例如一些 FTP 或是 WWW 网站),使用本函数可以取得全部的 IP 位址,返回到数组变量中. 返回值: 数组
Gethostbyaddr 返回机器名称。本函数可返回某个 IP 网址的机器名称 (Domain Name)。若执行失败,则返回原来的 IP 网址。返回值: 字符串
10. echo,print()和print_r()有什么区别?
答:echo是PHP语法结构,无返回值 。print和print_r是函数,函数可以有返回值
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
Echo
11. include和require的区别是什么?
答:包含文件不存在或者语法错误的时候require是致命的,include不是require需要放在头部预先载入,而include放在文件的任何位置随时载入还有一对扩展函数:require_once() include_once()
12. PHP5中魔术方法函数有哪几个,请举例说明各自的用法
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone , __autoload。
__construct() :实例化对象时被调用;
__destuct():当删除一个对象或者对象操作终止是被执行;
__call():调用对象不存在方法时被调用;
__get():调用对象不存在的属性时被调用;
__set():设置对象不存在的属性时被调用;_
_toString():打印一个对象时被调用,比如echo $obj,print($obj);
__clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;
__sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;
__wakeup():unserialize之前被调用,做些对象的初始化;
__isset():检测对象是否存在属性的时候被调用,如 isset($c->name);
__unset():unset一个对象属性时被调用,如:unset($c->name);
__set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值;,
__autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用。
12.你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?
1.脚本执行时间,启用xdebug,使用WinCacheGrind分析。 (WinCacheGrind是windows下的profile查看程序。所谓profile,就是程序或软件保存的档案资料,该软件常与XDebug配合使用来分析PHP程序的性能。)
2.数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。
13.请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明
ereg preg_match
ereg_replace preg_replace
14.请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响
safe_mode是提供一个基本安全的共享环境。在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响。首先,一下尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果想要尝试操作某个文件,必须要用户该文件的读取或者写入的访问权限。
因此,在safe_mode打开的情况下,下列函数将会收到限制: 输出一个或者多个字符串
Ckdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink
以上都是跟操作文件系统有关的函数,除此之外,一些php扩展的函数也会受到限制,不能在程序里面直接加载扩展,只能到php.ini里加载,而且php如果需要执行操作系统的程序时,必须在safe_mode_exec_dir中指定程序的路径,否则执行将失败。此外还有exec,shell_exec,pasathru,system,popen等函数会收到限制
15. 请写出让,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?
window下,假设php安装目录为c:\program files\php5\,那么使用命令窗口进入到该路径下,敲入php hello.php回车,则会执行当前路径下的hello.php文件,如果要指向其他路径下php文件,可以在php 路径/hello.php ,这种形式称为CLI模式,我们平时通过浏览器看到的那种成为CGI模式,至于传递参数,php文件在cli模式下,直接通过在文件名称后面接参数,多个参数中间用空格隔开,在php文件里面是通过两个变量来获取参数的,一个是$argv,一个是$argc,前者是传递参数的数组,默认第一个为php文件的名称;后者为$argv的数组个数。
linux下,一般程序安装都会安装在/usr/bin/php下面,可以通过man php查看一下,如果有信息说明可以使用,使用方法类似于window下。如果前面这步成立,那么你可以直接 php php文件 来运行php文件,如果man php没有信息,则说明当前php执行文件没有在环境路径里面,可以修改环境路径包含php路径,也可以类似于window进入php路径,在执行 php php文件。其他类似于window下。
16. PHP的垃圾收集机制是怎样的
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制,防止内存溢出。
当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.
17.使对象可以像数组一样进行foreach循环,要求属性必须是私有。
(Iterator模式的PHP5实现,写一类实现Iterator接口)
18.请写一段PHP代码,确保多个进程同时写入同一个文件成功
function writeData($path, $mode, $data){ $fp = fopen($path, $mode); $retries = 0; $max_retries = 100; do { if ($retries > 0) { } $retries += 1; }while (!flock($fp, LOCK_EX) and $retries <= $max_retries); usleep(rand(1, 10000)); if ($retries == $max_retries) { return false;
} } fwrite($fp, "$data\n"); flock($fp, LOCK_UN); fclose($fp); return true;
19. 用PHP实现一个双向队列
20、用PHP打印出前一天的时间格式是2006-5-10 22:21:21
答:echo date('Y-m-d H:i:s', strtotime('-1 days'));
21、能够使HTML和PHP分离开使用的模板
答:Smarty ,XTemplate
22、使用哪些工具进行版本控制?
答:cvs,svn,vss;
23、如何实现字符串翻转?
答:echo strrev($a); 函数反转字符串。
24.有一个网页地址, 比如PHP开发资源网主页: /index.html,如何得到它的内容? echo file_get_contents("/index.html");
25、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
26. 谈谈asp,php,jsp的优缺点。
27、谈谈对mvc的认识(1分)
答: 由模型(Model),视图(View),控制器(Controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
28、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
Select username,count(1) as 帖子数 from members group by username order by 帖子数 desc limit 0,10;
29. 请写一个函数验证电子邮件的格式是否正确 (2分)
function checkEmail($email)
{
$pregEmail="/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i"; return preg_match($pregEmail,$email);
}
30. 简述如何得到当前执行脚本路径,包括所得到参数。
答: __FILE __
PHP 的“魔术常量”
__FILE__ :被称为PHP魔术常量 ,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
__LINE__ :文件中的当前行号。
__FUNCTION__ :返回该函数被定义时的名字(区分大小写)
__CLASS__:返回该类被定义时的名字(区分大小写)
__METHOD__ :返回该方法被定义时的名字(区分大小写)
__NAMESPACE__ :当前命名空间的名称(大小写敏感)。
__DIR__ :文件所在的目录。
basename() — 返回路径中的文件名部分
<?php
$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path,".php"); // $file is set to "index"
?>
dirname() — 返回路径中的目录部分
<?php
$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"
?>
pathinfo ()— 返回文件路径的信息,返回一个关联数组包含有 path 的信息。包括以下的数组单元:dirname,basename,
extension。
<?php
$path_parts = pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "\n";
echo $path_parts["basename"] . "\n";
echo $path_parts["extension"] . "\n";
?>
以上例程会输出:
/www/htdocs
index.html
html
realpath — 返回规范化的绝对路径名
31、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)
答:弹出对话框: alert(),prompt(),confirm();获得输入焦点 focus()
32、JS的转向函数是?怎么引入一个外部JS文件?(2分)
答:window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
33、foo()和@foo()之间有什么区别?(1分)
答:@foo()控制错误输出
34、如何声明一个名为”myclass”的没有方法和属性的类? (1分)
答:class myclass{ }
35、如何实例化一个名为”myclass”的对象?(1分)
答:new myclass()
36、你如何访问和设置一个类的属性? (2分)
答:$object = new myclass();
$newstr = $object->test;
$object->test = "info";
37、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
答: mysql_fetch_array() 返回从结果集取得的行生成的数组,如果没有更多行则返回 false。
mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
38、GD库是做什么用的? (1分)
答: GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等
39、指出一些在PHP输入一段HTML代码的办法。(1分)
答:echo "<a href='index.php'>aaa</a>";
40、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)
表名User
Name Tel Content Date
张三 133xxxxxxxx 大专毕业 2006-10-11
张三 136xxxxxxxx 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
请根据上面的题目完成代码:
$mysql_db=mysql_connect("local","root","pass");
mysql_select_db("DB",$mysql_db);
$result = mysql_query("SELECT * FROM `user` WHERE name='张三'");
while($rs = mysql_fetch_array($result)){
echo $rs["tel"].$rs["content"].$rs["date"];
}
41、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)
表名User
Name Tel Content Date
张三 133xxxxxxxx 大专毕业 2006-10-11
张三 136xxxxxxxx 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 132xxxxxxxx 高中毕业 2007-05-06)请用SQL语句新增至表中
mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES ('小王','132xxxxxxxx','高中毕业','2007-05-06')")
(b) 请用sql语句把张三的时间更新成为当前系统时间
$nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='张山'");
(c) 请写出删除名为张四的全部记录
mysql_query("DELETE FROM `user` WHERE name='张四'");
42、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分) 答:i nt是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,
text文本字符串 ,char的场地固定为创建表设置的长度,varchar为可变长度的字符
43、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
答:isset($str),empty($str);
44、取得查询结果集总数的函数是?(1分)
答:mysql_num_rows($result);
45、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)
答:echo $arr[0];
46、请将41题的数组的值用','号分隔并合并成字串输出(1分)
答:for($i=0;$i<count($array);$i++){ echo $array[$i].",";}
47、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)
答:echo $a{0} 或 echo substr($a,0,1)
48、PHP可以和sql server/oracle等数据库连接吗?(1分)
答:当然可以
49、请写出PHP5权限控制修饰符(3分)
答:public(公共),private(私用),protected(继承)
50、请写出php5的构造函数和析构函数(2分)
答:__construct , __destruct
51、完成以下:
(一)创建新闻发布系统,表名为message有如下字段 (3分)
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
答:SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,
IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN
comment ON message.id=comment.id GROUP BY message.`id`;
(三)上述内容管理系统,表category保存分类信息,字段如下 (3分)
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
答:function categoryList()
{
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print("<select name='category' value=''>\n");
while($rowArray=mysql_fetch_array($result))
{
print("<option value='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</option>\n"); }
print("</select>");
}
意的SQL命令
如何防止SQL注入
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站
安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等,
mysql创建表
CREATE TABLE `course` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`totime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`isBook` enum('0','1') DEFAULT '0' COMMENT '0="no",1="yes"',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Php 对数据库增删改查
<?php
//删除 /*$sql ="delete from users where username='andy'"; if(!mysql_query($sql,$con)) { } echo "deleted success"; */ //插入 /*$sql = "insert into users values(NUll,'tom','111')"; if(!mysql_query($sql,$con)) die("delete failed"); $con = mysql_connect("localhost","root",""); if(!$con) { } mysql_select_db("test",$con); die("could not connect".mysql_error());
?> { } echo "add success";*/ //更新 /*$sql = "update users set password='000' where username='liubing'"; if(!mysql_query($sql,$con)) { } echo "update success"; */ //查询 $result = mysql_query("select * from users",$con); while($row = mysql_fetch_array($result)){ } mysql_close($con); echo "username:".$row['username']."password:".$row['password']; die("update failed"); die("insert failed");
重要的PHP超级全局变量总结
1、$_SERVER
2、$_GET
3、$_POST
4、$_COOKIE
5、$_FILES
6、$_ENV
7、$_REQUEST
8、$_SESSION
9、$GLOBALS
<?php
session_set_cookie_params(0);
session_start();
?>
session_save_path();
本函数可取得或者重新配置目前存放 Session 的路径。若无参数 path 则表示只有取得目前 Session 的路径目录名,加上参数 path 则表示将 Session 存在新的 path 上。
mysql_insert_id — 取得上一步 INSERT 操作产生的 IDs
mysql数据据存储引擎InnoDB和MyISAM的优势及区别
MyISAM:具有检查和修复表格的工具,表格可以被压缩,而且它们支持全文搜索. 而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:这种类型是事务安全的,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB
mt_rand(min,max)
如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。
rand() 函数返回随机整数。
同上
unix_timestamp()函数的作用是返回一个确切的时间点的UNIX时间戳,这个Unix时间戳是一个无符号整数。unix_timestamp()函数有两种重载形式,一是不带任何参数,另外一个是带有一个Date或DateTime或TimeStamp类型的参
数。
unix_timestamp(),返回自1970-1-1 8:00:00开始到当前系统时间为止的秒数。
unix_timestamp(date),返回1970-1-1 8:00:00开始到date所代表的时间为止的秒数,对于早于1970-1-1 8:00:00的时
间,总是返回0
from_unixtime(unixtime)
from_unixtime是MYSQL里的时间函数。
date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串
后面的 '%Y%m%d' 主要是将返回值格式化
例如:
mysql>SELECT FROM_UNIXTIME( 1195488000, '%Y%m%d' )
->20071120
mysql>SELECT FROM_UNIXTIME( 1195488000, '%Y年%m月%d' )
->20xx年11月20
Mysql 语句
24小时内记录(即24*60*6086400秒)
$sql="SELECT video_id,count(id)as num FROM `rec_down` WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(add_time) <= 86400 group by video_id order by num desc ";
TO_DAYS(date) 计算天数差值
作用是给出一个日期date,返回一个天数(从公元0年的天数);
select * from unews where to_days(utime)>= (to_days(now()) - 10);
今天记录
where to_days(utime) = to_days(now());
MySQL DATE_SUB() 函数
定义和用法
DATE_SUB() 函数从日期减去指定的时间间隔。
语法
DATE_SUB(date,INTERVAL expr type)date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
查询一周:
select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);
查询一个月:
select * from table where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(column_time);
CURDATE() 函数返回当前的日期。
下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果类似:
DATE() 函数返回日期或日期/时间表达式的日期部分。
实例
假设我们有如下的表:
我们使用下面的 SELECT 语句:
查询选择所有 date_col 值在最后 30 天内的记录。
SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
PHP配置文件详解php.ini
语言选项, 资源限制, 错误处理和记录, 文件处理, 路径和目录, 文件上传, 动态扩展, 模块设置.
PHP文件读取操作代码实例
<?
$readFun = "fread";
switch ($readFun)
{
case "fgetss":
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); $allowable_tags = "<h1>";
while (!feof($fp)) {
$output = fgetss($fp,100,$allowable_tags);
echo $output;
}
fclose($fp);
break;
case "fgetcsv":
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); while (!feof($fp)) {
$output = fgetcsv($fp,100,"\t");
print_r($output);
}
fclose($fp);
break;
case "readfile":
echo readfile("leapsoulcn.txt");
break;
case "fpassthru":
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); if(!fpassthru($fp))
exit();
fclose($fp);
break;
case "file":
$output = file("leapsoulcn.txt");
print_r($output);
break;
case "fgetc":
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); while (!feof($fp)) {
$str = fgetc($fp);
echo ($str == "\n"?"<br/>":$str);
}
fclose($fp);
break;
case "fread":
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); echo fread($fp,300);
fclose($fp);
break;
default:
@$fp = fopen("leapsoulcn.txt","r") or die("system error"); while (!feof($fp)) {
$output = fgets($fp,100);
echo $output;
}
fclose($fp);
break;
}
?>
ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法 ini_set()具有更改php.ini设置的功能。此函数接收两个参数:需要调整的配置变量名,以及变量的新值。
这样的设置将仅仅影响被设置的脚本。一旦脚本执行完毕,该变量将自动恢复到原始值。
/sunlylorn/article/details/6127354
set_error_handler() 函数设置用户自定义的错误处理函数。
该函数用于创建运行时期间的用户自己的错误处理方法。
该函数会返回旧的错误处理程序,若失败,则返回 null。
语法
magic_quotes_gpc 1. 对于PHP magic_quotes_gpc=on的情况, 我们可以不对输入和输出数据库的字符串数据作addslashes()和()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于PHP magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
PHP magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据
例:
1.
条件: PHP magic_quotes_gpc=off
写入数据库的字符串未经过任何过滤处理。从数据库读出的字符串也未作任何处理。
$data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号). 数据:
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: 出现sql语句错误,mysql不能顺利完成sql语句,写入数据库失败。
数据库保存格式:无数据。
输出数据格式:无数据。
说明: 对于未经处理的单引号在写入数据库时会使sql语句发生错误。
2.
条件: PHP magic_quotes_gpc=off
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。 $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号). 数据:
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow”’’sun (和输入一样)
输出数据格式:snow”’’sun (和输入一样)
说明: addslashes()函数将单引号转换为\’的转义字符使sql语句成功执行,
但\’并未作为数据存入数据库,数据库保存的是snow”’’sun 而并不是我们想象的snow\’\’\’\’sun 3.
条件: PHP magic_quotes_gpc=on
写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理。
$data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号). 数据:
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow”’’sun (和输入一样)
输出数据格式:snow”’’sun (和输入一样)
说明: PHP magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行,
但\’并未作为数据入数据库,数据库保存的是snow”’’sun而并不是我们想象的snow\’\’\’\’sun。 4.
条件: PHP magic_quotes_gpc=on
写入数据库的字符串经过函数addlashes()处理。从数据库读出的字符串未作任何处理。 $data=”snow”’’sun” ; (snow和sun之间是四个连续的单引号). 数据:
操作: 将字符串:”snow”’’sun” 写入数据库,
结果: sql语句顺利执行,数据成功写入数据库
数据库保存格式:snow\’\’\’\’sun (添加了转义字符)
输出数据格式:snow\’\’\’\’sun (添加了转义字符)
说明: PHP magic_quotes_gpc=on 将单引号转换为\’的转义字符使sql语句成功执行, addslashes又将即将写入数据库的单引号转换为\’,后者的转换被作为数据写入
数据库,数据库保存的是snow\’\’\’\’sun
php
mysql_affected_rows 和mysql_num_rows 区别
mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数
mysql_num_rows函数返回结果集中行的数目。
举例:
<?php
$conn=mysql_connect('localhost','root','');//连接数据库
mysql_select_db('flag');//选择数据库
echo mysql_affected_rows();
?>//最经 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。
<?php
mysql_connect('localhost','root','');//连接数据库
mysql_select_db('flag');//选择数据库
$query=mysql_query('select * from test');//执行查询运距
echo mysql_num_rows($query);
?>//结果是返回查询的行数
1.当从数据库中取出数据时,mysql_num_rows()函数返回符合查询条件的记录行数,如果没有符合的,返回0。
2.当向数据库插入数据和更新某个记录的部分内容时,用mysql_affected_rows返回插入或者更新成功的行数。
3.mysql_fetch_row()函数是查询成功后,把查询结果的一行取到一个数组中,以备使用;每执行一次mysql_fetch_row(),将自动取到结果中的下一行记录。
函数
: strip_tags($str, $allow)
作用: 去除html/xml和php标签.
参数: $allow规定例外的标签, 允许这些标签不被删除.
<?php
echo strip_tags("Hello <b>world!</b>");
// output: Hello world!
echo strip_tags("Hello <b><i>world!</i></b>","<b>");
// output: Hello world!
// 查看html源码: Hello <b>world!</b>
?>
备注:fgetss()函数有类似的功能.
函数: htmlspecialchars(string,quotestyle,character-set)
作用: 将特殊字元转换成html实体.
备注: 转换的特殊字元包括(只有这5个):
& (和) 转成 &
" (双引号) 转成 "
< (小于) 转成 <
> (大于) 转成 >
'' (单引号) 转成 '
<?php
$new = htmlspecialchars( "<a href='test'>Test</a>" , ENT_QUOTES);
echo $new ;
// output: <a href='test'>Test</a>
// html源码: <a href='test'>Test</a>
?>
函数:htmlentities
作用: 将所有的字符转换为html实体
参数: character-set可以指定字符集, 如果转换的字符串中有中文, 需要设置字符集为GB2312.
否则转换结果会出现乱码.
函数: html_entity_decode
作用: 把html实体还原成字符, 是htmlentities的反函数.
函数: htmlspecialchars_decode
作用: 把预定义的html实体还原成字符, 是htmlspecialchars的反函数.
函数: addslashes
作用: 在预定义的字符前添加反斜杠
备注: 预定义的字符包括单引号('),双引号(''),反斜杠(\),NULL.
该函数用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串。
如果php参数magic_quotes_gpc 为on, 对所有的get/post/cookie数据自动运行addslashes,这时不要再使用addslashes,避免双层转义;
遇到这种情况, 使用函数get_magic_quotes_gpc()进行检测.
函数: stripslashes
作用: 删除由addslashes()函数添加的反斜杠。
备注: 该函数用于清理从数据库或 HTML 表单中取回的数据。
函数: mysql_real_escape_string
作用: 转义 SQL 语句中使用的字符串中的特殊字符.
受影响字符包括:
?
?
?
?
?
?
? \x00 \n \r \ ' " \x1a
返回: 成功返回转义后的字符串, 失败返回false.
注释: 该函数和htmlspecialchars的区别在于,mysql_real_escape_string用于防止SQL注入, htmlspecialchars是将html转换, 避免XSS类攻击.