PHP

来自tomtalk
跳转至: 导航搜索

分类

开发笔记 PHP介绍 PHP代码片段
性能 PHP字符处理 PHP开发资源
Laravel CodeIgniter Yii
ThinkPHP PHP7

PHP安全细则

PHP开发web应用安全总结

php trait

手机号段是如何划分的?

(1)是移动的手机号码:150,151,152,157,158,159,134,135,136,137,138,139,187,188,147.

(2)是联通的手机号码有:130、131、132、155、156、185、186.         

(3)是电信的手机号码有:133、153 、180、189.

安装GCC

1 在GCC网站上http://gcc.gnu.org

源码安装PHP

1、http://www.php.net/downloads.php下载安装源码

tar -zxvf php-5.3.18.tar.gz cd php-5.3.18

PHP Fatal error: Allowed memory size of 16777216 bytes exhausted

  1. 修改配置文件php.ini文件。有些代码会重新设置。
  2. ini_set("memory_limit", "32M")。这个保险些。

PhpExcel fixbug

The Class PHPExcel_Shared_String File is not found !

//return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'), true, true);  //增加两参数

PhpExcel使用方法

下面是总结的几个使用方法
include 'PHPExcel.php';
include 'PHPExcel/Writer/Excel2007.php';
//或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的
创建一个excel
$objPHPExcel = new PHPExcel();
保存excel—2007格式
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
//或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式
$objWriter->save("xxx.xlsx");
直接输出到浏览器
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
header("Pragma: public");
header("Expires: 0″);
header("Cache-Control:must-revalidate, post-check=0, pre-check=0);
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");;
header('Content-Disposition:attachment;filename="resume.xls"');
header("Content-Transfer-Encoding:binary");
$objWriter->save('php://output');
——————————————————————————————————————–
设置excel的属性:
创建人
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
最后修改人
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
标题
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
题目
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
描述
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
关键字
$objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
种类
$objPHPExcel->getProperties()->setCategory("Test result file");
——————————————————————————————————————–
设置当前的sheet
$objPHPExcel->setActiveSheetIndex(0);
设置sheet的name
$objPHPExcel->getActiveSheet()->setTitle('Simple');
设置单元格的值
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String');
$objPHPExcel->getActiveSheet()->setCellValue('A2', 12);
$objPHPExcel->getActiveSheet()->setCellValue('A3', true);
$objPHPExcel->getActiveSheet()->setCellValue('C5', '=SUM(C2:C4)');
$objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C5)');
合并单元格
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
分离单元格
$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');
 
保护cell
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection!
$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
设置格式
// Set cell number formats
echo date('H:i:s') . " Set cell number formats\n";
$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );
设置宽width
// Set column widths
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
设置font
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara');
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
$objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
$objPHPExcel->getActiveSheet()->getStyle('D13')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->getStyle('E13')->getFont()->setBold(true);
设置align
$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
//垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
设置column的border
$objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('B4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('C4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('D4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle('E4')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
设置border的color
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');
设置填充颜色
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->getStartColor()->setARGB('FF808080');
加图片
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Logo');
$objDrawing->setDescription('Logo');
$objDrawing->setPath('./images/officelogo.jpg');
$objDrawing->setHeight(36);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Paid');
$objDrawing->setDescription('Paid');
$objDrawing->setPath('./images/paid.png');
$objDrawing->setCoordinates('B15');
$objDrawing->setOffsetX(110);
$objDrawing->setRotation(25);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(45);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
//处理中文输出问题
需要将字符串转化为UTF-8编码,才能正常输出,否则中文字符将输出为空白,如下处理:
 $str  = iconv('gb2312', 'utf-8', $str);
或者你可以写一个函数专门处理中文字符串:
function convertUTF8($str)
{
   if(empty($str)) return '';
   return  iconv('gb2312', 'utf-8', $str);
}
//从数据库输出数据处理方式
从数据库读取数据如:
$db = new Mysql($dbconfig);
$sql = "SELECT * FROM  表名";
$row = $db->GetAll($sql);  // $row 为二维数组
$count = count($row);
for ($i = 2; $i <= $count+1; $i++) {
 $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, convertUTF8($row[$i-2][1]));
 $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, convertUTF8($row[$i-2][2]));
 $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, convertUTF8($row[$i-2][3]));
 $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, convertUTF8($row[$i-2][4]));
 $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, convertUTF8(date("Y-m-d", $row[$i-2][5])));
 $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, convertUTF8($row[$i-2][6]));
 $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, convertUTF8($row[$i-2][7]));
 $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, convertUTF8($row[$i-2][8]));
}
 
在默认sheet后,创建一个worksheet
echo date('H:i:s') . " Create new Worksheet object\n";
$objPHPExcel->createSheet();
$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objWriter-save('php://output');

取当前时间,月份的首尾日期

private function getMonthRange($time)
{
    return array(
        'begin' => date('Ym01', $time),
        'end' => date('Ymt', $time)
    );
}

以天小时分秒显示的时间差

private function timediff($begin_time, $end_time)
{
    if ($begin_time < $end_time) {
        $starttime = $begin_time;
        $endtime   = $end_time;
    } else {
        $starttime = $end_time;
        $endtime   = $begin_time;
    }
 
    $timediff = $endtime - $starttime;
    $days     = intval($timediff / 86400);
    $remain   = $timediff % 86400;
    $hours    = intval($remain / 3600);
    $remain   = $remain % 3600;
    $mins     = intval($remain / 60);
    $secs     = $remain % 60;
    $res      = array("day" => $days, "hour" => $hours, "min" => $mins, "sec" => $secs);
 
    return $res;
}

PHP中计算时间间隔的方法

$start = new DateTime($rows[0]->DATE);
$end = new DateTime($rows[count($rows) - 1]->DATE);
$interval = $end->diff($start);
echo $interval->days;

DateInterval, DatePeriod使用示例

$begin = new DateTime('2012-08-01');
$end = new DateTime('2012-08-31');
$end = $end->modify('+1 day');
 
$interval = new DateInterval('PT12H');  //时间要以T引导
$daterange = new DatePeriod($begin, $interval, $end);
 
foreach ($daterange as $date) {
    echo $date->format("Ymd") . "<br>";
}

取当前日期,前后指定数量的月份首尾日期

/**
 * 取当前日期,前后指定数量的月份首尾日期。
 * $direct =  1  后几个月
 * $direct = -1  前几个月
 */
private function getMonths($num, $direct = -1)
{
    $months = [];
    $now = date('Y-m-d');
 
    $start = date('Y-m-01');
    $end = $now;
 
    if ($direct === -1) {
        for ($n = 1; $n <= $num; $n++) {
            $months[] = [
                'start' => $start,
                'end' => $end
            ];
 
            $now = date('Y-m-d', strtotime($start . '-1day'));
            $start = date('Y-m-01', strtotime($now));
            $end = $now;
        }
 
        return array_reverse($months);
    } else {
        $end = date('Y-m-d', strtotime($start . '1month')); //后一个月
        $end = date('Y-m-d', strtotime($end . '-1day')); //前一天
 
        for ($n = 1; $n <= $num; $n++) {
            $months[] = [
                'start' => $start,
                'end' => $end
            ];
 
            $start = date('Y-m-d', strtotime($start . '1month')); //后一个月
 
            $end = date('Y-m-d', strtotime($start . '1month')); //后一个月
            $end = date('Y-m-d', strtotime($end . '-1day'));
        }
 
        return $months;
    }
}

怎么来计算几天后,几小时后,几分钟后,几周,几个月,几年后的时间?

$endtime='2009-02-28 16:29:18';
 
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1month'));
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1week'));
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1day'));
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1year'));
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1hour'));
$endtime = date('Y-m-d H:i:s', strtotime($endtime.'1minute'));
 
echo $endtime;
 
date('Y-m-d', strtotime('1 month')); //一个月以后
date('Y-m-d', strtotime('-1 month')); //一个月以后

取系统毫秒时间

list($s1, $s2) = explode(' ', microtime());
$time = (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);

php中生成标准uuid(guid)的方法

function guid(){
    if (function_exists('com_create_guid')){
        return com_create_guid();
    }else{
        mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $hyphen = chr(45);// "-"
        $uuid = chr(123)// "{"
                .substr($charid, 0, 8).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,20,12)
                .chr(125);// "}"
        return $uuid;
    }
}
echo guid();

php设置和获取cookie

http://www.cnblogs.com/ycsfwhh/archive/2012/09/14/2684957.html

php的表达式是有值的

if ($b = 0) {  
    echo 'true';  
} else {  
    echo 'false';  
}

代码很简单,就这几行。我当时想当然认为,表达式$b = 0是永远成立的,所以最后输出’true’,然后自己试验了一下,却输出’false’。然后我就迷茫了,why?

我再次去看手册上关于“表达式”的内容,发现原来关于表达式的很多细节都是以前没有注意到的,最关键是表达式是有值的,引用手册上的话:

“PHP 是一种面向表达式的语言,从这一方面来讲几乎一切都是表达式。考虑刚才已经研究过的例子,“$a = 5”。很显然这里涉及到两个值,整型常量5的值以及而且变量 $a 的值,它也被更新为5。但是事实是这里还涉及到一个额外的值,即附值语句本身的值。赋值语句本身求值为被赋的值,即 5。

实际上这意味着“$a = 5”,不必管它是做什么的,是一个值为 5 的表达式。因而,这样写“$b = ($a = 5)”和这样写“$a =5; $b=5”(分号标志着语句的结束)是一样的。因为赋值操作的顺序是由右到左的,也可以这么写“$b = $a =5”。”

exec()执行多条命令

$file = array();
 
exec("cd /home/wwwlogs; ls access_*.log", $file);
 
echo json_encode($file);

php获取当前类名函数名的方法

今天分析了一下THINKPHP框架的模板自动加载功能,其中运用到了获取到当前类与方法。所以查了些资料,在此和大家分享分享

__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

get_class(class name);//取得当前语句所在类的类名
get_class_methods(class name);//取得class name 类的所有的方法名,并且组成一个数组
get_class_vars(class name);//取得class name 类的所有的变量名,并组成一个数组

分享几个PHP数组函数

数组随机读取

应用场景:随机显示文章神马的,这个肯定不能用mysql来做,效率太低

shuffle() 函数把数组中的元素按随机顺序重新排列。

注释:本函数为数组中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。

array_rand

array_rand() 函数从数组中随机选出一个或多个元素,并返回。

第二个参数用来确定要选出几个元素。如果选出的元素不止一个,则返回包含随机键名的数组,否则返回该元素的键名。

求数组最大键名

这个不是求键值而是求键名

array_search(max($a), $a)

max(array_flip($a));

max(array_keys($arr));

分割数组

array_chunk()函数把一个数组分割为新的数组块。

其中每个数组的单元数目由size参数决定。最后一个数组的单元数目可能会少几个。

可选参数preserve_key是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从0开始的新数字键(用于索引数组)。默认是分配新的键。

一个比is_numeric更适合id判断的方法

is_numeric能判定一个变量是否为数字或数字字符串,但是它的判定范围太宽了。整数、小数、指数表示以及16进制数值都会通过判断。 平时判定id的时候,用它就有点不合适。今天发现一个新的判定函数:ctype_digit,它可以只判定整数,这样就比is_numeric好一些。

其他还有ctype_xdigit判定16进制整数,ctype_alpha判定字母等等函数。 参考PHP的ctype函数库

  1. ctype_ alnum
  2. ctype_ alpha
  3. ctype_ cntrl
  4. ctype_ digit
  5. ctype_ graph
  6. ctype_ lower
  7. ctype_ print
  8. ctype_ punct
  9. ctype_ space
  10. ctype_ upper
  11. ctype_ xdigit

Variable handling Functions

  1. debug_ zval_ dump
  2. doubleval
  3. empty
  4. floatval
  5. get_ defined_ vars
  6. get_ resource_ type
  7. gettype
  8. import_ request_ variables
  9. intval
  10. is_ array
  11. is_ bool
  12. is_ callable
  13. is_ double
  14. is_ float
  15. is_ int
  16. is_ integer
  17. is_ long
  18. is_ null
  19. is_ numeric
  20. is_ object
  21. is_ real
  22. is_ resource
  23. is_ scalar
  24. is_ string
  25. isset
  26. print_ r
  27. serialize
  28. settype
  29. strval
  30. unserialize
  31. unset
  32. var_ dump
  33. var_ export

bookmarks