PHP
语句include和require都能把另一个文件包含到当前文件中,它们的区别是?为了多次包含同一文件,可以用什么语句替代它们?
include引入不存在,会报warning
require引入不存在,会报fatal error
_once如果之前已经引用过,就不会重复引用,如果没有加_once,重复引用就会出现致命错误
include_once之前需要检查是否有引用,所以不如include效率高
规范编码下,推荐include
能够实现防止SQL注入的函数或方式?
mysql
- 过滤输入和转义输出
- mysql_real_escape_string( )
- 使用支持参数化查询语句和占位符的数据库操作类(如PEAR::DB, PDO等)
- magic_quotes_gpc选项打开
- PDO
- MYSQLi
哪些方式能将网页上的图片(http://xxxx.com/xx.jpg)保存到本地电脑硬盘?
ob
ob_start();//打开输出
readfile($url);//输出图片文件
$img = ob_get_contents();//得到浏览器输出
ob_end_clean();//清除输出并关闭
$size = strlen($img);//得到图片大小
$fp2 = @fopen($filename, "a");
fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
fclose($fp2);
return $filename;//返回新的文件名
file_get_contents
$img = file_get_contents('http://www.baidu.com/img/baidu_logo.gif');
file_put_contents('1.gif',$img);
echo '<img src="1.gif">';
下面代码的输出结果(static的理解)?
<?php
function add()
{
static $num =1;
$num ++;
return $num ;
}
$a = add() + add() + add() ;
echo $a;
结果是9。
2 + 3 + 4 = 9
静态变量。
代码实现,交换$a
和$b
的值,不引用第三方变量。
//字符串版本 结合使用substr,strlen两个方法实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a.=$b;
$b=substr($a,0,(strlen($a)-strlen($b)));
$a=substr($a, strlen($b));
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
echo '-----------------------<br/>';
//字符串版本 使用str_replace方法实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a.=$b;
$b=str_replace($b, "", $a);
$a=str_replace($b, "", $a);
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
echo '-----------------------<br/>';
//字符串版本 结合使用list方法和array实现
$a="a";
$b="b";
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
list($b,$a)=array($a,$b);
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
echo '-----------------------<br/>';
//字符串和数字都适用 使用异或运算
$a='a';
$b='b';
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a=$a^$b;
$b=$b^$a;
$a=$a^$b;
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
echo '-----------------------<br/>';
//只适用于数字
$a=3;
$b=5;
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a=$a+$b;
$b=$a-$b;
$a=$a-$b;
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
写一个类,实现单例
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
class C
{
protected static $_instance = null;
protected function __construct()
{
}
protected function __clone()
{
//disallow clone
}
public function getInstance()
{
if (static::$_instance === null) {
static::$_instance = new static;
}
return static::$_instance;
}
}
class D extends C
{
protected static $_instance = null;
}
$c = C::getInstance();
$d = D::getInstance();
var_dump($c === $d);
写一段代码,实现打印/var/www/html
的目录结构
$current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false
while(($file = readdir($current_dir)) !== false) { //readdir()返回打开目录句柄中的一个条目
$sub_dir = $path . DIRECTORY_SEPARATOR . $file; //构建子目录路径
if($file == '.' || $file == '..') {
continue;
}else if(is_dir($sub_dir)) { //如果是目录,进行递归
echo 'Directory ' . $file . ':
'; //如果是文件夹,输出文件夹名称
traverse($sub_dir); //嵌套遍历子文件夹
}else{ //如果是文件,直接输出路径和文件名
echo 'File in Directory ' . $path . '/' . $file .'
';
}
}
}