不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2016-08-04 14:34  分类:PHP基础  编辑

php.ini 里有个 disable_functions 开关选项,此选项可关闭一些危险的函数,比如system,exec 等。比如: disable_functions = phpinfo , 如果在文件中调用 phpinfo() 函数,那么在 error_reporting 开启的情况下,会提示如下错误:

Warning: phpinfo() has been disabled for security reasons

屏蔽函数实例:

disable_functions= phpinfo,dl, exec, system
作者:php-note.com  发布于:2016-08-02 17:51  分类:PHP基础  编辑

PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是某些时候,用unset()却无法达到销毁变量占用的内存!我们先看一个例子:

<?php
$s = str_repeat('1',255);	//产生由255个1组成的字符串
$m = memory_get_usage();	//获取当前占用内存
unset($s);
$mm = memory_get_usage();	//unset()后再查看当前占用内存
echo $m-$mm;
?>
作者:php-note.com  发布于:2016-07-19 14:16  分类:PHP基础  编辑

数组是PHP的灵魂,非常强大,但有时候面向对象编程也是挺方便的,数组 与 对象 之间切换也是常有的事:

/**
 * 数组 转 对象
 *
 * @param array $arr 数组
 * @return object
 */
function array_to_object($arr) {
	if (gettype($arr) != 'array') {
		return;
	}
	foreach ($arr as $k => $v) {
		if (gettype($v) == 'array' || getType($v) == 'object') {
			$arr[$k] = (object)array_to_object($v);
		}
	}

	return (object)$arr;
}

/**
 * 对象 转 数组
 *
 * @param object $obj 对象
 * @return array
 */
function object_to_array($obj) {
	$obj = (array)$obj;
	foreach ($obj as $k => $v) {
		if (gettype($v) == 'resource') {
			return;
		}
		if (gettype($v) == 'object' || gettype($v) == 'array') {
			$obj[$k] = (array)object_to_array($v);
		}
	}

	return $obj;
}
作者:php-note.com  发布于:2016-07-19 14:00  分类:PHP基础  编辑

Mac Pro 电脑编译安装了 PHP 5.6.21,先前的系统运行时报如下警告级错误:

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead.

意思是 自动变量 $HTTP_RAW_POST_DATA 已过时,将来会被移除,使用 php://input 流方式代替!

作者:php-note.com  发布于:2016-04-10 00:03  分类:PHP基础  编辑

array_walk 有个原生递归函数 array_walk_recursive($arr, 'function', 'words'),但是 array_map 却没有对应的递归函数 array_map_recursive,我们可以自定义一个:

作者:php-note.com  发布于:2016-02-18 15:03  分类:PHP基础  编辑

延迟静态绑定

在PHP5.3以后引入了延迟静态绑定。看下面这段代码:

<?php
class A {
	public static function who() {
		echo __CLASS__;
	}

	public static function test() {
		self::who();
	}
}

class B extends A {
	public static function who() {
		echo __CLASS__;
	}
}

B::test();
?>

上面的代码输出了A,但是我希望它输出B,这就是问题的所在。这也是self和__CLASS__的限制。使用self::或者 __CLASS__对当前类的静态引用,取决于定义当前方法所在的类。所以,这就很好的解释了为什么上面的代码输出了A。但是,如果我们需要输出B呢?

作者:php-note.com  发布于:2015-12-15 16:09  分类:PHP基础  编辑

后台往往需要导出各种数据到 Excel文档中。通常我们是导出 .csv文件格式,PHP导出函数参考代码如下:

/**
 * 导出数据到CSV文件
 *
 * @param array $data 二维数组(模拟数据表记录)
 * @param array $titleList 标题数组列表
 * @param string $fileName CSV文件名
 */
function csv_export(&$data, $titleList = array(), $fileName = '')

作者:php-note.com  发布于:2015-12-01 00:12  分类:PHP基础  编辑

一、先看最简单的情况。

有两个数组:

$arr1 = array(1, 9, 5);
$arr2 = array(6, 2, 4);

array_multisort($arr1, $arr2);

print_r($arr1); // 得到的顺序是1,5,9
print_r($arr2); // 得到的顺序是6,4,2

我估计两个数组的值自始至终都是对应着的:1对应6,9对应2,5对应4。

作者:php-note.com  发布于:2015-09-25 12:04  分类:PHP基础  编辑

文件夹文件拷贝/复制函数

/**
 * 文件夹文件拷贝
 *
 * @param string $src 来源文件夹
 * @param string $dst 目的地文件夹
 * @return bool
 */
function dir_copy($src = '', $dst = '') {
	if (empty($src) || empty($dst)) {
		return false;
	}

	$dir = opendir($src);
	dir_mkdir($dst);
	while (false !== ($file = readdir($dir))) {
		if (($file != '.') && ($file != '..')) {
			if (is_dir($src . '/' . $file)) {
				dir_copy($src . '/' . $file, $dst . '/' . $file);
			} else {
				copy($src . '/' . $file, $dst . '/' . $file);
			}
		}
	}
	closedir($dir);

	return true;
}

 

作者:php-note.com  发布于:2015-08-26 15:15  分类:PHP基础  编辑

PHP如何计算短信的长度/字数?

项目中,用到发短信功能,但是每条短信如果字数超过70,会作为一条新的短信发送,所以在记录发送短信日志时,需要计算下文字个数!

英文、中文统一为一个字来计算,上面的 strlen_utf8($str) 正好可以解决这个问题。