git 学习笔记

首先,最近使用 git 是因为工作的需要,其次是偶尔也在 github 里提交一下代码之类的。以前一直使用 svn 作为代码管理工具,也仅限于提交合并代码,查看提交日志之前的,没有太多地研究。

除了学习基本命名之外,有空还想研究一下基于 git 的自动化部署,如何把代码部署到生产环境上,如何回滚版本。

基础知识

 

php不能使用exec执行命令的问题解决方法

在项目中要使用 aapt dump badging 命令来获取apk包信息,单独放到一个php文件里可以执行返回信息,但是放到项目中就不行,百度了一遍之后发现,原来是apache配置文件里使用了php安全模式引起的。

Windows下处理apache虚拟主机的权限:

1、开启安全模式,可以禁用exec()、system()等函数。

2、在httpd.conf中用php_admin_value open_basedir限制PHP的存取目录。

3、在php_admin_value open_basedir别忘了加上php.ini中指定的PHP临时上传目录和session保存目录,不然会无法上传文件、存取session。

php.ini中按如下配置:

upload_tmp_dir = “E:/APMServ5.2.0/PHP/uploadtemp/”

session.save_path = “E:/APMServ5.2.0/PHP/sessiondata/”

4、Apache2.0配置示例:


ServerName www.abc.com
DocumentRoot “E:/smis”
Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php
AllowOverride None
Order Deny,Allow
Allow from all
php_admin_value open_basedir “E:/smis/;E:/APMServ5.2.0/PHP/uploadtemp/;E:/APMServ5.2.0/PHP/sessiondata/”
php_admin_value safe_mode On

5、Apache2.2配置示例:


ServerName www.abc.com
DocumentRoot “E:/smis”


Options FollowSymLinks IncludesNOEXEC Indexes
DirectoryIndex index.html index.htm default.htm index.php default.php

php判断两个文件是否完全相同

场景:在线文件存储,如各种云备份功能;

起因:如果有大量的小文件上传,有些是重复的,会造成服务器端大量的文件冗余,霸占了大量的硬盘容量不说,还不方便维护管理,这个时候,就需要判断服务器端上是否存在文件了。

解决:

1、比较笨的办法:用file_get_contents把文件load进内存里对二进制进行比较,这种比较占系统资源,效率也不太高。

2、计算文件hash值,可以md5,sha1,crc32等多种方法同时使用,这样就可以避免单一方式重复碰撞的可能,但是建议两种方式为宜,减少运算量,可以先检查文件大小,再检查md5,如果都相同,可以再增加检查sha1或crc32,不同文件全部重复的可能性,几乎不存在。

代码:

$filename = "test.txt";
$sha1file = sha1_file($filename);
echo $sha1file;
$md5file = md5_file($filename);
echo $md5file;

做云存储、网盘什么之类的应该也是用的这种原理,但肯定会更细致。以后再慢慢研究。

php使用rsa加密

在android项目中要用到加密与服务端通讯,避免中途被人恶意截取了信息。

我在linux下生成了密钥对,拿到windows环境下开发调试,发现总是报这个错:

supplied key param cannot be coerced into a private

百度了很久才找到一点有用的信息,在phpchina里有一帖子也遇到同样问题。

原文:http://bbs.phpchina.com/thread-222563-1-1.html

大致原因是因为公钥和私钥不配对,并没有根据私钥来生成公钥。

然后我到linux下重新生成了密钥对,再测试,果然通过了。

PHP方法重写时参数引起的Declaration of should be compatible解决办法

提示内容:Declaration of … should be compatible with that of …

PHP官方问题详细描述为:https://bugs.php.net/bug.php?id=46851
如上面的代码:类A中的foo方法无参数,类B在继承A后重写foo方法时加入了参数,因此会产生一个类似下面E_STRICT级别的警告: Strict standards: Declaration of … should be compatible with that of …

解决方法:

<?php

abstract class A {

// 方法无参数

public static function foo(){ echo ‘bar’; }

}

abstract class B extends A {

// 方法有参数

public static function foo($str = NULL){ echo $str; }

}

?>

类B在重写foo方法时为新加入的参数指定一个默认值即可。