按月份归档:5 月 2013

windows下PHP批量生成打包android程序APK

服务器安装php环境

下载 android-sdk-windows  下载JDK

1.打开zip支持 c:/windows/php.ini ,打开 exec

2.apk 支持
mime添加 .apk application/vnd.android.package-archive

3.安装javaSDK(要和android的编辑版本一致)

4.编辑IIS绑定权限(www:www) ,目录没有权限会导致生成失败

5.配置两个虚拟主机

A:down.coolaj.cn  用于下载

B:make.cookaj.cn  用于制作签名

6. down的index.php

<?php
/*
 * Created on 2012-5-21
 * coolaj.cn
 */

// var_dump($id);

function cocode() {

	 foreach($_GET as $k=>$v){
		$id = $k;
		break;
	 }
	 if($_GET['u']){
		$id=$_GET['u'];
	 }
	if(is_numeric($id)){
		return $id;
	}elseif ($id && preg_match('/^U/', $id)) {	
		$id = base64_decode(substr($id,1).'=')>>2;
		return $id;
	}
}

$id = cocode();

if(file_exists('bbshenqi'.$id.".apk") || empty($id)){
	if(empty($id)){
		header('Location: http://www.coolaj.cn/bbshenqi.apk');
		exit;
	}
	header('Location: http://down.coolaj.cn/bbshenqi'.$id.'.apk');
}else{
	$cc =file_get_contents("http://make.coolaj.cn/makeapk.php?apkname=".$id.'&r=简单加密');
	if($cc == 'ok'){
		if(file_exists('bbshenqi'.$id.".apk")){
			echo '<meta http-equiv="content-type" content="text/html; charset=gbk" />';
			echo '<a href="http://down.coolaj.cn/bbshenqi'.$id.'.apk">生成失败,点击重试</a>';
			exit;
		}
		header('Location: http://down.coolaj.cn/bbshenqi'.$id.'.apk');
	}
 }

?>

阅读全文 ……

js倒计时

<SCRIPT LANGUAGE="JavaScript">   
<!--   
var maxtime = 60*60 //一个小时,按秒计算,自己调整!   
function CountDown(){   
if(maxtime>=0){   
minutes = Math.floor(maxtime/60); 
while(minutes>=60){
	minutes = Math.floor(minutes-60); 
}  
seconds = Math.floor(maxtime%60); 
hour = Math.floor(maxtime/3600);  
msg = "<span id='RemainD'>"+hour+"</span>小时<span>"+minutes+"</span>分钟<span>"+seconds+"</span>秒";   
document.all["timer"].innerHTML=msg;   
if(maxtime == 5*60) alert('注意,还有5分钟!');   
--maxtime;   
}   
else{   
clearInterval(timer);   
alert("时间到,结束!");   
}   
}   
timer = setInterval("CountDown()",1000);   
//-->   
</SCRIPT>   
<div id="timer" style="color:red"></div>

 

PHP生成随机字符串的方法

static function make_yqm($length = 5){
		// 密码字符集,可任意添加你需要的字符  
		$chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's','t', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O','P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z','0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!','@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_','[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',','.', ';', ':', '/', '?');  

		// 在 $chars 中随机取 $length 个数组元素键名  
		$keys =array_rand($chars, $length);
		$password = ''; 
		for($i=0;$i<$length;$i++){  
			// 将 $length 个数组元素连接成字符串  
			$password .= $chars[$keys[$i]];  
		}  
		return $password;
	}

 

PHP smtp方式发送email

<?php
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer(); //建立邮件发送类
$mail->CharSet = "UTF-8";
$address ="aj@coolaj.cn";
$mail->IsSMTP(); // 使用SMTP方式发送
$mail->Host = "smtp.exmail.qq.com"; // 您的企业邮局域名
$mail->SMTPAuth = true; // 启用SMTP验证功能
$mail->Username = "aj@coolaj.cn"; // 邮局用户名(请填写完整的email地址)
$mail->Password = "XXX"; // 邮局密码
$mail->Port=25;
$mail->From = "biaobai@coolaj.cn"; //邮件发送者email地址
$mail->FromName = "aj";
$mail->AddAddress("$address", "");//收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名")
//$mail->AddReplyTo("", "");
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件
$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式

$mail->Subject = "test"; //邮件标题
$mail->Body = "ajtest"; //邮件内容,上面设置HTML,则可以是HTML

if(!$mail->Send()){
	echo "邮件发送失败. <p>";
	echo "错误原因: " . $mail->ErrorInfo;
}

?>

代码下载: phpmailer

配置apache虚拟主机

基于不同情况下配置apache虚拟主机的方法,一共八种情况。首先查看你虚拟主机属于哪一种情况,然后对号入座就好了。过程不复杂,关键在于对症下药。

步骤/方法

  1. 基于ip地址的虚拟主机
    Listen 80
    <VirtualHost 172.20.30.40>
    DocumentRoot /home/httpd/html1
    ServerName www.ok1.com
    ErrorLog /usr/local/apache/logs/error1_log
    CustomLog /usr/local/apache/logs/access1_log combined
    </VirtualHost>
    <VirtualHost 172.20.30.50>
    DocumentRoot /home/httpd/html2
    ServerName www.ok2.com
    ErrorLog /usr/local/apache/logs/error2_log
    CustomLog /usr/local/apache/logs/access2_log combined
    </VirtualHost>
  2. 基于IP 和多端口的虚拟主机配置
    Listen 172.20.30.40:80
    Listen 172.20.30.40:8080
    Listen 172.20.30.50:80
    Listen 172.20.30.50:8080
    <VirtualHost 172.20.30.40:80>
    DocumentRoot /www/example1-80
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    DocumentRoot /www/example1-8080
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.50:80>
    DocumentRoot /www/example2-80
    ServerName www.example1.org
    </VirtualHost>
    <VirtualHost 172.20.30.50:8080>
    DocumentRoot /www/example2-8080
    ServerName www.example2.org
    </VirtualHost>
  3. 单个IP 地址的服务器上基于域名的虚拟主机配置
    # Ensure that Apache listens on port 80
    Listen 80
    # Listen for virtual host requests on all IP addresses
    NameVirtualHost *:80
    <VirtualHost *:80>
    DocumentRoot /www/example1
    ServerName www.example1.com
    ServerAlias example1.com. *.example1.com
    # Other directives here
    </VirtualHost>
    <VirtualHost *:80>
    DocumentRoot /www/example2
    ServerName www.example2.org
    # Other directives here
    </VirtualHost>
  4. 在多个IP 地址的服务器上配置基于域名的虚拟主机
    Listen 80
    # This is the “main” server running on 172.20.30.40
    ServerName server.domain.com
    DocumentRoot /www/mainserver
    # This is the other address
    NameVirtualHost 172.20.30.50
    <VirtualHost 172.20.30.50>
    DocumentRoot /www/example1
    ServerName www.example1.com
    # Other directives here …
    </VirtualHost>
    <VirtualHost 172.20.30.50>
    DocumentRoot /www/example2
    ServerName www.example2.org
    # Other directives here …
    </VirtualHost>
  5. 在不同的端口上运行不同的站点(基于多端口的服务器上配置基于域名的虚拟主机)
    Listen 80
    Listen 8080
    NameVirtualHost 172.20.30.40:80
    NameVirtualHost 172.20.30.40:8080
    <VirtualHost 172.20.30.40:80>
    ServerName www.example1.com
    DocumentRoot /www/domain-80
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    ServerName www.example1.com
    DocumentRoot /www/domain-8080
    </VirtualHost>
    <VirtualHost 172.20.30.40:80>
    ServerName www.example2.org
    DocumentRoot /www/otherdomain-80
    </VirtualHost>
    <VirtualHost 172.20.30.40:8080>
    ServerName www.example2.org
    DocumentRoot /www/otherdomain-8080
    </VirtualHost>
  6. 基于域名和基于IP 的混合虚拟主机的配置
    Listen 80
    NameVirtualHost 172.20.30.40
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example1
    ServerName www.example1.com
    </VirtualHost>
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example2
    ServerName www.example2.org
    </VirtualHost>
    <VirtualHost 172.20.30.40>
    DocumentRoot /www/example3
    ServerName www.example3.net
    </VirtualHost>

在命令行执行PHP程序

一直把PHP当web端服务程序了,不知道他也是脚本,脚本啊,亲

配置说明

①. 添加php目录到系统环境变量path

②.

param1,param2,为参数。xxx.php文件可以接受传入的这两个参数,分别用$argv[1],$argv[2]接受传入的param1和param2.。

示例xxx.php:

<?php
for($i=$argv[1];$i<=$argv[2];$i++)
{
echo $i."\n";
}
?>

 

在命令行下运行:php xxx.php 1 10

则输出:1 2 3 4 5 6 7 8 9 10

您可以设置cookie,管理数字签名和重定向用户,而且它提供了极好的连通性到其它数据库(还有ODBC),集成各种外部库来做用PDF文档解析 XML的任何事情。那你还知道可以用php的强大功能做点别的东西吗?在以独立的cgi方式运行时,需要一个php可执行程序,他有很多PHP命令行参数 的,有些可以用作很好玩的用途,下面是全部的PHP命令行参数,其中[]表示可有可无的,<>表是一定要的。

用法 php [-q] [-h] [-s] [-v] [-i] [-f ] | { [args…]} -q 安静模式。不输出HTTP头。

-s 将php程序文件用转化为彩色格式的HTML(比如保留字用绿色,函数和变量为蓝色,注释为黄色而字串则是红色等等。

-f 读入并解释指明的文件。

-c 在中读入php.ini文件

-a 交互式运行

-d foo[=bar] 定义ini中的输入项 foo 的值为 bar

-e 输出额外信息以便调试和性能分析

-z 调入Zend扩展文件

-i php的相关信息

-h help本身。

1.用php -q 文件名.php 方式把php程序当shell程序来用,

2.用 -s把自己的php程序html化。这样是不是很省心?

3.利用PHP命令行参数的odbc功能可以在shell命令中对数据库进行操作。

 

③一个读取数据并插入到数据库的例子

<?php
$Host = "localhost";
$Database = "test";
$DbaUser     = "root";
$DbaPassword = "";
$db = mysql_pconnect($Host, $DbaUser,$DbaPassword);
mysql_set_charset('utf8', $db); 
if(!$db){
	echo "我擦,数据库崩溃了~";
	exit;
}
mysql_select_db($Database,$db);
/*while($res = mysql_fetch_array($result)){var_dump($res);}*/
$handle = @fopen("F:/wamp/www/bb/ok_all0525.txt", "r");
if ($handle) {
	while (!feof($handle)) {
		$str = fgets($handle, 4096);
		$arr = explode(",",$str);
		$qq = explode("@",$arr[0]);
		$query = "INSERT INTO `qq` (`qq`,`b1`,`b2`,`b3`) VALUES ('{$qq[0]}','{$arr[1]}','{$arr[2]}','{$arr[3]}')";
		$result = mysql_query($query);
		var_dump($qq[0].$result);
	}
	echo 'ok';
}

mysql_close($db);
?>

 

 

页面防注入、跨站等等过滤代码

1.将waf.php传到要包含的文件的目录

2.在页面中加入防护,有两种做法,根据情况二选一即可:

a).在所需要防护的页面加入代码
require_once(‘waf.php’);
就可以做到页面防注入、跨站
如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!
添加require_once(‘waf.php’);来调用本代码

常用php系统添加文件
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2 \config\config_global.php
Wordpress \wp-config.php
Metinfo \include\head.php

b).在每个文件最前加上代码
在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = waf.php路径;

代码如下:

<?php
/*云体检通用漏洞防护补丁v1.0
更新时间:2013-04-25
功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞
*/
$url_arr=array(
'xss'=>"\=\+\/v(8|9|\+|\/)|%0acontent\-(id|location|type|transfer\-encoding)",
);
$args_arr=array(
	'xss' =>"[\'\"\;\*\<\>]+.*\b(on)[a-zA-Z]{3,15}[\s\r\n\v\f]*\=|\b(expression)\(|<script[\s\\\\\/]*.*>|(<!\[cdata\[)|\b(eval|alert|prompt|msgbox)\s*\(|url\((\#|data|javascript)",
	'sql' =>"([^{\s]{1}.+(select|update|insert((\/\*[\S\s]*?\*\/)|(\s)|(\+))+into).+?(from|set)((\/\*[\S\s]*?\*\/)|(\s)|(\+))+)|[^{\s]{1}.+(create|delete|drop|truncate|rename|desc)((\/\*[\S\s]*?\*\/)|(\s)|(\+))+(table|from|database)((\/\*[\S\s]*?\*\/)|(\s)|(\+))|(into((\/\*[\S\s]*?\*\/)|\s|\+)+(dump|out)file\b)|\bsleep\((\s*)(\d*)(\s*)\)|benchmark\(([^\,]*)\,([^\,]*)\)|\b(declare|set|select)\b.*@|union\b.*(select|all)\b|(select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\b.*((charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\(|(master\.\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\.db|sys\.database_name|information_schema\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\.dbms_export_extension))",
	'other'=>"(..)[^&]*((%2500)|(%00))+[^0-9a-fA-F]|((%2500)|(%00))+[\'\"\.]+"
);
$referer=empty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']);
$query_string=empty($_SERVER["QUERY_STRING"]) ? array() : array($_SERVER["QUERY_STRING"]);

check_data($query_string,$url_arr);
check_data($_GET,$args_arr);
check_data($_POST,$args_arr);
check_data($_COOKIE,$args_arr);
check_data($referer,$args_arr);
function W_log($log)
{
	$logpath=$_SERVER["DOCUMENT_ROOT"]."/log.txt";
	$log_f=fopen($logpath,"a+");
	fputs($log_f,$log."\r\n");
	fclose($log_f);
}
function check_data($arr,$v) {
 foreach($arr as $key=>$value)
 {
	if(!is_array($key))
	{ check($key,$v);}
	else
	{ check_data($key,$v);}

	if(!is_array($value))
	{ check($value,$v);}
	else
	{ check_data($value,$v);}
 }
}
function check($str,$v)
{
	foreach($v as $key=>$value)
	{
	if (preg_match("/".$value."/is",$str)==1||preg_match("/".$value."/is",urlencode($str))==1)
		{
			//W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str);
			print "您的提交带有不合法参数,谢谢合作";
			exit();
		}
	}
}
?>

 

IAP (内置购买) 服务器端代码

php的 curl 和  SSL (open_ssl)这两个模块开启

<?php
//服务器二次验证代码
function getReceiptData($receipt, $isSandbox = false)   
{   
	if ($isSandbox) {   
		$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';   
	}   
	else {   
		$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';   
	}   

	$postData = json_encode(   
		array('receipt-data' => $receipt)   
	);   

	$ch = curl_init($endpoint);   
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
	curl_setopt($ch, CURLOPT_POST, true);   
	curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);   
	//这两行一定要加,不加会报SSL 错误
	curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  
	curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 

	$response = curl_exec($ch);   
	$errno    = curl_errno($ch);   
	$errmsg   = curl_error($ch);   
	curl_close($ch);   
	//判断时候出错,抛出异常
	if ($errno != 0) {   
		throw new Exception($errmsg, $errno);   
	}   

	$data = json_decode($response);   
	//判断返回的数据是否是对象
	if (!is_object($data)) {   
		throw new Exception('Invalid response data');   
	}   
	//判断购买时候成功
	if (!isset($data->status) || $data->status != 0) {   
		throw new Exception('Invalid receipt');   
	}   

	//返回产品的信息			
	return array(   
		'quantity'       =>  $data->receipt->quantity,   
		'product_id'     =>  $data->receipt->product_id,   
		'transaction_id' =>  $data->receipt->transaction_id,   
		'purchase_date'  =>  $data->receipt->purchase_date,   
		'app_item_id'    =>  $data->receipt->app_item_id,   
		'bid'            =>  $data->receipt->bid,   
		'bvrs'           =>  $data->receipt->bvrs   
	);   
}   

//获取 App 发送过来的数据,设置是否是沙盒状态
$receipt   = $_GET['data'];   
$isSandbox = true;   
//开始执行验证
try
 {
	 $info = getReceiptData($receipt, $isSandbox);   
	 // 通过product_id 来判断是下载哪个资源
	 switch($info['product_id']){
		case 'com.application.xxxxx.xxxx':
			Header("Location:xxxx.zip");
		break;			 
	}
 }
//捕获异常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>