标签归档:PHP

LNAMP和LNMP服务器环境中如何关闭日志

使用独立主机或者云主机或者VPS经常遇到的一个问题就是由于硬盘空间占满而导致的各种故障,而导致硬盘占满绝大多数时候是由于日志,本文详细总结了LNMP和LNAMP中所有服务的日志相关的配置。

Apache
错误日志
在httpd.conf添加
ErrorLog off
无此指令默认生成日志。

访问日志
删除或者注释CustomLog指令,无此指令默认不生成日志。

apache用#注释

Nginx
错误日志
http段添加
error_log off
仍会生成error.log,但是空的

访问日志
http段添加
access_log off
之后虚拟主机默认不生成日志,但仍可通过在server段添加access_log指令来启用部分网站的访问日志。

nginx用#注释

MySQL
慢查询日志
注释或者删除my.cnf中的log-slow-queries指令,无此指令默认不生成日志。

二进制bin-log日志
注释或者删除my.cnf中的log-bin指令,无此指令默认不生成日志。

错误日志
log-error=/dev/null,无此指令默认生成日志。
(所有的日志都可以指向到/dev/null来给变相禁止掉,但是这是一种很挫的方式,其他的日志指令都提供了禁止的参数,但是这条配置我找了半天没有找到,很可能是没有)

MySQL用;或#注释配置

php-fpm
如果php-fpm没有配置日志相关的指令,所有的日志默认都不生成。配置文件一般为php-fpm.conf。
慢执行日志
slowlog

访问日志
access.log

错误日志
error_log

php-fpm用;注释配置

日志在有些时候是很有用的,比如访问日志可以用来分析WEBSHELL和黑客入侵和蜘蛛抓取情况,错误日志可以用来分析服务启动失败的原因,慢查询和慢执行日志可以用来优化程序,ETC。
但是有些情况是不得不考虑的,一是受硬盘空间的限制,二是对于很多用户还没有能力来分析日志(开了日志也用不到)。
除非可以确定日志是能用得到的,并且硬盘空间允许,否则建议关闭日志,以避免各种意想不到的突如其来的麻烦。
很多日志都可以在需要查看的时候再开启,比如MySQL启动不了的时候可以把它的error_log打开。

PS,可以利用cron制定自动清除日志,具体形式有很多种,也很复杂,本文不做叙述。

emlog blog转换成为wordpress blog

由于emlog感觉更新慢,没什么可玩性,插件与主题也少所以想换成wordpress blog程序,但是曾经写的日志还想保留,在网上找了一个从emlog转换wordpress的程序,程序不完美,最终没办法自己写了一个php程序来做转换;

emlog有它的优点,执行速度快,wordpress虽然很不错,但是执行速度不敢恭维啊,最终用“WP Super Cache”插件基本上文章的打开速度算是提高了,但是也不是很完美;

 

本程序支持文章、评论、标签、友情链接转换;

PHP获取实际地理位置信息

	//通过传递"经度"、"纬度"获取所在地理位置
	//$lat: 纬度
	//$lng: 经度
	//$BaiDu_AK: 百度AK密钥
	function GetLocation($lat, $lng, $BaiDu_AK) {
		$strLocation = "";
		$gps_data = file_get_contents("http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=$lng&y=$lat");
		$arr = (array)json_decode($gps_data);
		$lat_t = $lng_t = "";
		if (!$arr['error']) {
			$lat_t = base64_decode($arr['y']);
			$lng_t = base64_decode($arr['x']);
		}
		if (strlen($lat_t) > 0 && strlen($lng_t) > 0) {
			$xml = new DOMDocument();
			$xml->load("http://api.map.baidu.com/geocoder/v2/?ak=$BaiDu_AK&callback=renderReverse&location=$lat_t,$lng_t&output=xml&pois=0");
			$result_s = $xml->getElementsByTagName("result");
			foreach($result_s as $result) {
				$formatted_address_s = $result->getElementsByTagName("formatted_address");
				$strLocation = $formatted_address_s->item(0)->nodeValue;
				break;
			}
		}
		if (strlen($strLocation) == 0) {
				$xml = new DOMDocument();
				$xml->load("http://maps.233.wiki/maps/api/geocode/xml?latlng=$lat,$lng&sensor=false&language=zh-CN");
				$result_s = $xml->getElementsByTagName("result");
				foreach($result_s as $result) {
					$formatted_address_s = $result->getElementsByTagName("formatted_address");
					$strLocation = $formatted_address_s->item(0)->nodeValue;
					break;
				}
		}
		return $strLocation;
	}
	echo GetLocation("39.935377", "119.600492", "自己的百度AK");

PHP处理大于2038年以后的日期

    php函数中的date函数在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。 如何解决这个问题?幸运的是php 5.2.0版本以后我们直接使用php的DateTime 类DateTime::format 被设计成不受外部设置影响(面向对象就应该如此)。
    所以无论你如何改变环境参数 date_default_timezone ,都不会影响输出结果要想改变 DateTime::format 的时区设置,需要向
DateTime::setTimezone 传入一个时区对象 DateTimeZone

$d = new DateTime('@2444486400');
$d->setTimezone(new DateTimeZone('PRC'));
echo $d->format('Y-m-d H:i:s');  //2047-06-19 00:00:00

    将大于2038年的标准时间转化成时间戳

$d = new DateTime('2047-06-19 00:00:00');
echo $date->format('U'); //2444486400

更多请看:http://www.php.net/manual/en/datetime.construct.php

php字符串处理函数大全

addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“\n”替换成“<br/>”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn — 返回字符连续非匹配长度的值
strip_tags — 去除一个字符串里面的HTML和PHP代码
stripcslashes — 反转义addcslashes()函数转义处理过的字符串
stripos — 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes — 反转义addslashes()函数转义处理过的字符串
stristr — 通过比较返回一个字符串的部分,比较时不区分大小写
strlen — 获取一个字符串的编码长度
strnatcasecmp — 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp — 使用自然排序法对字符串进行大小比较
strncasecmp — 对字符串的前N个字符进行大小比较,不区分大小写
strncmp — 对字符串的前N个字符进行大小比较
strpbrk — 通过比较返回一个字符串的部分
strpos — 查找并返回首个匹配项的位置
strrchr — 通过从后往前比较返回一个字符串的部分
strrev — 将字符串里面的所有字母反向排列
strripos — 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos – 从后往前查找并返回首个匹配项的位置
strspn — 匹配并返回字符连续出现长度的值
strstr — 通过比较返回一个字符串的部分
strtok — 用指定的若干个字符来分割字符串
strtolower — 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr — 对字符串比较替换
substr_compare — 对字符串进行截取后的比较
substr_count — 计算字符串中某字符段的出现次数
substr_replace — 对字符串中的部分字符进行替换
substr — 对字符串进行截取
trim — 去除字符串两边的空白或者指定的字符
ucfirst — 将所给字符串的第一个字母转换为大写
ucwords — 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf — 按照要求对数据进行返回,并直接写入文档流
vprintf — 按照要求对数据进行显示
vsprintf — 按照要求对数据进行返回,但是不输出
wordwrap — 按照一定的字符长度分割字符串