/**
* 请写一个函数,实现以下功能:
* 字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
*/
function strConver(string $string) {
$array = explode("_", $string);
$string = '';
foreach ($array as $str) {
$string .= ucfirst($str);
}
return str_replace("_", "", $string);
}
echo strConver('make_by_id');
/**
* 请写一个函数将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
*/
function numberConver(int $number) {
//反转
$number = strrev($number);
$str = '';
for ($i=0; $i<strlen($number); $i++) {
$str .= $number[$i];
if($i != 0 && ($i+1)%3 == 0) {
$str .= ',';
}
}
return strrev($str);
}
$number = 1234567890;
echo numberConver($number);
/**
* 请用php将中读取出的网页内容的<title>标签的值解析出来。
*/
$regex ="/<title>(.*)<\/title>/";
$result = array();
preg_match($regex, $str,$result);
echo trim($result[0],"<title></title>");
/**
* 用最少的代码写一个求3个值最大值的函数.
*/
echo '<hr/>';
$a = 8; $b = 33; $c = 2;
// 1
echo max($a, $b, $c);
// 2
echo ($a ? $b : $a) > $c ? ($a ? $b : $a ) : $c;
/**
* PHP可阅读随机字符串
* 此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。
* @param int $length
* @return string
*/
function readable_random_string($length = 6) {
$conso = array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","x","y","z");
$vocal = array("a","e","i","o","u");
$password="";
srand ((double)microtime()*1000000);
$max = $length/2;
for($i=1; $i<=$max; $i++) {
$password.=$conso[rand(0,19)];
$password.=$vocal[rand(0,4)];
}
return $password;
}
echo readable_random_string() . '<br/>';
/**
* PHP编码电子邮件地址
* 使用此代码,可以将任何电子邮件地址编码为 html 字符实体,以防止被垃圾邮件程序收集。
* @param string $email
* @param string $linkText
* @param string $attrs
* @return string
*/
function encode_email($email='info@domain.com', $linkText='Contact Us', $attrs ='class="emailencoder"') {
$email = str_replace('@','@',$email);
$email = str_replace('.','.',$email);
$email = str_split($email,5);
$linkText = str_replace('@','@',$linkText);
$linkText = str_replace('.','.',$linkText);
$linkText = str_split($linkText,5);
$part1 = '<a href="ma';
$part2 = 'ilto:';
$part3 = '" '. $attrs .' >';
$part4 = '</a>';
$encoded = '<script type="text/javascript">';
$encoded .= "document.write('$part1');";
$encoded .= "document.write('$part2');";
foreach($email as $e) {
$encoded .= "document.write('$e');";
}
$encoded .= "document.write('$part3');";
foreach($linkText as $l) {
$encoded .= "document.write('$l');";
}
$encoded .= "document.write('$part4');";
$encoded .= '</script>';
return $encoded;
}
echo encode_email() . '<br/>';
/**
* PHP强制性下载文件
* @param $file
*/
function force_download($file) {
if ((isset($file)) && (file_exists($file))) {
header("Content-length: ".filesize($file));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file . '"');
readfile("$file");
} else {
echo "No file selected<br/>";
}
}
force_download("index.php1");
/**
* PHP为 URL 地址预设 http 字符串
* @param $url
* @param bool $https
* @return string
*/
function addhttp($url, $https = true) {
$prefix = 'http://';
if (!preg_match("/^(http|ftp|https):/", $url)) {
if($https) {
$prefix = 'https://';
}
$url = $prefix . $url;
}
return $url;
}
echo addhttp("www.baidu.com", true) . '<br/>';
/**
* PHP调整图像尺寸
* @param $filename
* @param $tmpname
* @param $xmax
* @param $ymax
* @return resource
*/
function resize_image($filename, $tmpname, $xmax, $ymax) {
$ext = explode(".", $filename);
$ext = $ext[count($ext)-1];
if($ext == "jpg" || $ext == "jpeg") $im = imagecreatefromjpeg($tmpname);
elseif($ext == "png") $im = imagecreatefrompng($tmpname);
elseif($ext == "gif") $im = imagecreatefromgif($tmpname);
$x = imagesx($im);
$y = imagesy($im);
if($x <= $xmax && $y <= $ymax) return $im;
if($x >= $y) {
$newx = $xmax;
$newy = $newx * $y / $x;
} else {
$newy = $ymax;
$newx = $x / $y * $newy;
}
$im2 = imagecreatetruecolor($newx, $newy);
imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);
return $im2;
}
/**
* PHP检测 ajax 请求
* 大多数的 JavaScript 框架如 jquery,Mootools 等,在发出 Ajax 请求时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,头当他们一个ajax请求,因此你可以在服务器端侦测到 Ajax 请求。
*/
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo "This is ajax<br/>"; //IfAJAX Request Then
} else {
echo "Is not ajax<br/>"; //something else
}
// 获取url后缀
function get($url) {
// 解析 URL,返回其组成部分
// 指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。
//
$php_url_path = parse_url($url, PHP_URL_PATH);
// 返回路径中的文件名部分。
$file = basename($php_url_path);
// 获取后缀名
$ext = explode(".", $file);
return $ext[1];
}
function getexts($url) {
$url = basename($url);
// 字符串中第一次出现的位置
$pos1 = strpos($url, ".");
// 字符串中第一次出现的位置
$pos2 = strpos($url, "?");
if(strstr($url, "?")) {
return substr($url, $pos1+1,$pos2-$pos1-1);
} else {
return substr($url, $pos1);
}
}
$url = "http://localhost/webtest/phpmst/test.php";
echo get($url)."<br/>";
echo getexts($url)."<br/>";
/**
* 冒泡
* @param $arr
*/
$arr = array(11,23,545,667,888,1119,55,98);
function bubblesort($arr) {
$temp = 0;
for($i=0;$i<count($arr);$i++) {
for($j=0;$j<count($arr)-1;$j++) {
if($arr[$j] > $arr[$j+1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
print_r(bubblesort($arr));
/**
* 写一个函数,算出两个文件的相对路径,计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
* @param $a
* @param $b
* @return string
*/
function relative_path($path1, $path2) {
$arr1 = explode('/',dirname($path1));
$arr2 = explode('/',dirname($path2));
for($i=0, $len=count($arr2); $i<$len;$i++) {
if($arr1[$i] != $arr2[$i]) {
break;
}
}
//不在同一个根目录下
if($i==1){
$return_path = array();
}
//在同一个根目录下
if($i!=1 && $i<$len){
$return_path = array_fill(0,$len-$i,"..");
}
//在同一个目录下
if($i==$len){
$return_path = array('./');
}
$return_path = array_merge($return_path,array_slice($arr1,$i));
return implode('/',$return_path);
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
$c = '/e/b/c/d/f.php';
$d = '/a/b/c/d/g.php';
echo relative_path($a, $b)."<br/>";
echo relative_path($a,$c)."<br/>";
echo relative_path($a,$d)."<br/>";
/* 在HTML语言中,页面头部的meta标记可以用来输出文件的编码格式,以下是一个标准的meta语句
<META http-equiv='Content-Type' content='text/html'; charset='gbk'>
请使用PHP语言写一个函数,把一个标准HTML页面中的类似 meta 标记中的 charset 部分值改为 big5。
请注意:
(1) 需要处理完整的html页面,即不光此meta语句
(2) 忽略大小写
(3) ‘ 和 ” 在此处是可以互换的
(4) ‘Content-Type’ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk’ 两侧的不行
(5) 注意处理多余空格
解析:这里全面考察正则表达式匹配。
(1) 需要处理完整的html页面,即不光此 meta 语句 ==> preg_replace()
(2) 忽略大小写 ==> i修饰符
(3) ‘ 和 ” 在此处是可以互换的 ==> 多选结构 ["/']
(4) ‘Content-Type’ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk’ 两侧的不行 => 可选结构 ’?
(5) 处理多余的空格 \s? 表示0到多处空白
综合,我们得到的测试代码如下:*/
$html = "<meta http-equiv='Content-Type' content='text/html; charset=gbk'>";
//匹配标准的meta标签
$pattern = "/<meta\s*http-equiv\s*=\s*(\'|\")?Content-Type(\'|\")?\s*content\s*=\s*(\'|\")text\/html\s*;\s*charset=(.*)(\'|\")>/i";
$replacement = "<meta http-equiv='Content-Type' content='text/html; charset=big5'>";
$result = preg_replace($pattern, $replacement, $html);
echo htmlspecialchars($result) . '<br/>';
//=====================================================
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'] . '<br/>';//获取网页地址
echo $_SERVER['REMOTE_ADDR'] . '<br/>';//获取IP地址
//字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
$arr = array_map("ucfirst",
explode("_","open_door")
);
echo implode($arr,"") . '<br/>';
/**
* 按字段排序数组
* @param $arr
* @param $row
* @param string $type
* @return mixed
*/
function array_sort($arr, $row, $type="asc") {
foreach($arr as $v) {
$arr_temp[$v[$row]] = $v;
}
if($type = "asc") {
ksort($arr_temp);
} else {
krsort($arr_temp);
}
return $arr_temp;
}
$person = array(
array('id' => 2,'name' => 'zhangsan','age' => 23),
array('id' => 5,'name' => 'lisi','age' => 19),
array('id' => 3,'name' => 'wangwu','age' => 27)
);
$person = array_sort($person,'name');
var_dump($person);
echo '<br/>';
function array_sort2($arr, $row, $type="SORT_DESC") {
$sort = array(
'direction' => $type, //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
'field' => $row, //排序字段
);
$arrSort = array();
foreach($arr AS $uniqid => $row) {
foreach($row AS $key=>$value) {
$arrSort[$key][$uniqid] = $value;
}
}
if($sort['direction']) {
array_multisort($arrSort[$sort['field']], constant($sort['direction']), $arr);
}
return $arr;
}
$sArr = array_sort2($person,'name');
var_dump($sArr);
echo '<br/>';
/**
* 实现strrev()函数“360奇虎”,不使用mb_substr情况下。
* @param $string
* @return string
*/
function myStrrev($string) {
$length = strlen($string);
$rev_string = '';
$byte_len = 3; // 限UTF-8字符编码字节占3,不然还有写个is_utf8来判断所占用的字节数
for ($i = 0; $i < $length;) {
// 判断每个字符的 ASCII 值,大于126为汉子,utf-8是三个字节,所以加+
if(ord(substr($string, $i, 1)) > 126) {
$rev_string = substr($string, $i, $byte_len) . $rev_string;
$i+= $byte_len;
} else {
$rev_string = substr($string, $i, 1) . $rev_string;
$i++;
}
}
return $rev_string;
}
$string = "虎奇063";
echo myStrrev($string) . '<br/>';
/**
* 实现strrev()函数“360奇虎”,不使用mb_substr情况下。
* @param $str
* @return string
*/
function strrev_utf8($str) {
return join("", array_reverse(
preg_split("//u", $str)
));
}
echo strrev_utf8($string) . '<br/>';
/**
* 获取文件扩展名
* @param $filename
* @return mixed
*/
function getExtension($filename){
$myext = substr($filename, strrpos($filename, '.'));
return str_replace('.','',$myext);
}
echo getExtension('index.ajax.php');
/**
* 获取文件大小并格式化
* @param $size
* @return string
*/
function formatSize($thefile) {
$size = filesize($thefile);
$sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
if ($size == 0) {
return('n/a');
} else {
return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]);
}
}
echo formatSize('test_file.mp3');
/**
* 强制下载文件
* @param $filename
*/
function download($filename) {
if ((isset($filename)) && (file_exists($filename))) {
header("Content-length: ".filesize($filename));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
readfile("$filename");
} else {
echo "Looks like file does not exist!";
}
}
/**
* 检测访问的ip是否为规定的允许的ip
*/
function check_ip() {
$ALLOWED_IP = array('192.168.2.*', '127.0.0.1', '192.168.2.49');
$IP = getIP();
$check_ip_arr = explode('.', $IP);//要检测的ip拆分成数组
#限制IP
if (!in_array($IP, $ALLOWED_IP)) {
foreach ($ALLOWED_IP as $val) {
if (strpos($val, '*') !== false) {//发现有*号替代符
$arr = array();
$arr = explode('.', $val);
$bl = true;// 用于记录循环检测中是否有匹配成功的
for ($i = 0; $i < 4; $i++) {
if ($arr[$i] != '*') {//不等于* 就要进来检测,如果为*符号替代符就不检查
if ($arr[$i] != $check_ip_arr[$i]) {
$bl = false;
break;//终止检查本个ip 继续检查下一个ip
}
}
}
if ($bl) {//如果是true则找到有一个匹配成功的就返回
return;
die;
}
}
}
header('HTTP/1.1 403 Forbidden');
echo "Access forbidden";
die;
}
}