h5手机页面自适应宽高


h5自适应页面一共需要4步,记录一下,以便以后查看
1.设置meta头标签

<meta name="applicable-device" content="mobile">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0,maximum-scale=1">
    <meta name="format-detection" content="telephone=no" />
    <meta content="yes" name="mobile-web-app-capable">
    <meta content="yes" name="apple-mobile-web-app-capable" />

2.添加js 代码,适配rem

<script>
//designWidth:设计稿的实际宽度值,需要根据实际设置

//maxWidth:制作稿的最大宽度值,需要根据实际设置
//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750)
(function(designWidth, maxWidth) {

var doc = document,
win = window,
docEl = doc.documentElement,
remStyle = document.createElement("style"),
tid;

function refreshRem() {
    var width = docEl.getBoundingClientRect().width;
    maxWidth = maxWidth || 540;
    width>maxWidth && (width=maxWidth);
    var rem = width * 100 / designWidth;
    remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
}

if (docEl.firstElementChild) {
    docEl.firstElementChild.appendChild(remStyle);
} else {
    var wrap = doc.createElement("div");
    wrap.appendChild(remStyle);
    doc.write(wrap.innerHTML);
    wrap = null;
}
//要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
refreshRem();

win.addEventListener("resize", function() {
    clearTimeout(tid); //防止执行两次
    tid = setTimeout(refreshRem, 300);
}, false);

win.addEventListener("pageshow", function(e) {
    if (e.persisted) { // 浏览器后退的时候重新计算
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300);
    }
}, false);

if (doc.readyState === "complete") {
    doc.body.style.fontSize = "16px";
} else {
    doc.addEventListener("DOMContentLoaded", function(e) {
        doc.body.style.fontSize = "16px";
    }, false);
}

})(750, 750);

    </script>

3.将单位由px修改为rem
注:1rem约等于16px
4.将页面中的相对距离改为百分数,如

<div class="zwrap" style="position: relative;">
            <img src="img/1.jpg"/>
            <img src="img/2.jpg"/>
            <img src="img/3.jpg"/>
            <img src="img/4.jpg"/>
            <img src="img/5.jpg"/>
            <img src="img/6.jpg"/>
            <a  href="#">
            <img src="img/2-1.jpg" style="position: absolute;top:31%;left:30%;width: 3rem;height:1rem; " />
        </a>
            <a  href="#">
            <img src="img/6-2.jpg"/ style="position: absolute;top:89%;left:35%;width: 2rem;height:1rem;">
        </a>
    </div>

FaceBook SDK登录功能实现(Eclipse)


由于公司游戏要进行海外推广,所以要我们接入FBSDK 实现登录,分享,投放,所以写这篇文章,也算是个工作总结。
1、资料

(1).FB SDK github源码地址为
(2): [FB SDK中文接入文档]
2.创建应用,获取应用编号和密钥
这些事情,文档中都有详细描述,我就不进行赘述了
3.下载FB SDK,并配置参数
(1).解压facebook-android-sdk-4.25.0.aar文件,并将其中的assets,res,AndroidManifest.xml,classes.jar等复制的eclipse 新建工程下,并配置项目为library

(2).由于FB SDK引用了v7包和资源,所以要把v7项目引入到FB SDk中来(注:不只是v7包,项目一般在你的sdk目录下的extrasandroidsupportv7)

(3) 配置参数,在eclipse res/values/strings.xml中加入

<string name="facebook_app_id">133094273807591</string>

(4),在AndroidManifest中,添加权限,配置参数

<uses-permission android:name="android.permission.INTERNET"/>

application下配置参数

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

将FB SDK自定义Activity加到application中

<activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 

(5).引入新建的FB sdk工程

4.接入 FB SDK

(1).在自定义application 中初始化SDK参数

public class MyApplication extends Application{

    public void onCreate() {
        super.onCreate();
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
    }
}

(2),新建LoginActivity接入FB SDK代码

public class LoginActivity extends Activity {
    private static final String PERMISSION = "public_profile";

    private static final int PICK_PERMS_REQUEST = 0;

    private CallbackManager callbackManager;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     // 注册登录回调
        callbackManager = CallbackManager.Factory.create();
        LoginManager loginManager = LoginManager.getInstance();
        loginManager.setDefaultAudience(loginManager.getDefaultAudience());
        loginManager.setLoginBehavior(loginManager.getLoginBehavior());
        loginManager.logInWithReadPermissions(LoginActivity.this,
                Arrays.asList(PERMISSION));
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(final LoginResult loginResult) {
                        // App code
                        Toast.makeText(LoginActivity.this, "登录成功",
                                Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(LoginActivity.this,
                                AppActivity.class);
                        startActivity(intent);
                    }

                    @Override
                    public void onCancel() {
                        // App code
                        Toast.makeText(LoginActivity.this, "登录失败,请稍后重试",
                                Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(final FacebookException exception) {
                        // App code
                        Toast.makeText(LoginActivity.this, "登录失败,请稍后重试",
                                Toast.LENGTH_LONG).show();
                    }
                });
      

    }

    /**
    * 处理登录结果
    */

    @Override
    protected void onActivityResult(final int requestCode,
            final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_PERMS_REQUEST) {
            if (resultCode == RESULT_OK) {
                LoginManager loginManager = LoginManager.getInstance();
                loginManager.setDefaultAudience(loginManager
                        .getDefaultAudience());
                loginManager.setLoginBehavior(loginManager.getLoginBehavior());
                loginManager.logInWithReadPermissions(LoginActivity.this,
                        Arrays.asList(PERMISSION));
            }
        } else {
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
    }
}

php对excel导入导出的支持


闲话不多说了,大家直接进入主题

php对excel的导入:

  1.为程序添加一个form表单,为form标签添加“enctype="multipart/form-data"”属性

  2.为form所提交过去的页面导入excel工具类,下载地址:下载

  3.为form所提交过去的页面添加以下代码:

    

ini_set("memory_limit", "100000m");
set_time_limit(0);
$data = new Spreadsheet_Excel_Reader($_FILES['file']['tmp_name'],true);
 $list = $data->sheets[0]['cells'];//选择excel的shell
if($list)
        {
                unset($list[1]);
                //print_r($list);

                foreach($list as $key=>$val)
                {
                     $data = trim($val[1]);// data即为excel中第一列数据,后面的数据以此类推
    }
}        
php

对excel的导出:

  为新建一个界面添加以下代码:

  

Header("Content-type:   application/octet-stream");
Header("Accept-Ranges:   bytes");
Header("Content-type:application/vnd.ms-excel");
Header("Content-Disposition:attachment;filename=export_excel.xls");

接着直接使用echo输出即可,以t和n切换单元格


perl学习笔记


这篇博客记录一些我学习perl时的一些笔记,持续更新:

1.perl连接数据库的两种方式

 

#!/usr/bin/perl
use POSIX qw(strftime);
use Encode;
use URI::Escape;
use DBI;
my $db = DBI->connect("DBI:mysql:database=mysql;host=localhost", "root", "123456", {'RaiseError' => 1});
$sql="select *  from table";
my $rs = $db -> prepare($sql);
                $rs -> execute;
           while($row= $rs->fetchrow_hashref()){
           $s=$row->{'status'};          
}
#!/usr/bin/perl


use Mysql;
use POSIX qw(strftime);
use Encode;
use URI::Escape;
$db=Mysql->connect("localhost","mysql","root","123456") or die("connect fail!!");
$query = "select * from table ";

        if($result->numrows==0){
                sleep(6);
                next;
        }
    while(%row=$result->fetchhash){
          $id = $row{"id"};
    }  

2.perl遍历二维hash

方法一:

 $hash{“data”}{“data1”} = "二维hash";
    
    foreach my $k (keys %hash) {
      foreach my $k1 (keys %{$hash{$k}}) {
    
      }
    }

 方法二:

foreach my $key1 (sort keys %hash) #首先对key1进行排序
{    
     foreach my $key2 (sort {$hash{$key1}->{$b}<=>$hash{$key1}->{a}} keys %{$hash{$key1}}) #对value值按照数字大小进行逆序排序
#    foreach my $key2 (sort {$a<=>$b} keys %{$hash{$key1}})   #对key2按照数字大小进行排序
    {
        print $key1."t".$key2."t".$hash{$key1}->{$key2}."n";
    }

3.perl读取传进来的文件内容

#!/usr/bin/perl
use POSIX qw(strftime);
use Encode;
use URI::Escape;

$file=$ARGV[0];#获取第一个输入数据
open( FH, $file );#打开文件
#open( FH1,">", "data"); 写入文件内容
foreach $line ( <FH> ){
       chomp($line);#去除空格
        @arr=split(/\t/,$line);#按\t截取
        print  $arr[0].'\t'.$arr[1];
        #print FH1  $arr[0].'\t'.$arr[1]; #写入文件
}

close(FH);#关闭文件
#close(FH1);

perl脚本去除文件中重复数据


今天第一天写博客,写的不好请大家多多指教,废话不多说了,干货送上:

#############################################################

#!/usr/bin/perl
use warnings;
use strict;
my %hash;
my $source_file=$ARGV[0]; #输入文件
my $dest_file = $ARGV[1];#输出文件
open (FILE,"<$source_file") or die "Cannot open file $!\n"; #打开文件
open (SORTED,">$dest_file") or die "Cannot open file $!\n";
while(defined (my $line = <FILE>))
{#从文件中取出要去重的数据
        chomp($line);#去除空格
     #$line=~ s/[\r\n]+//mg;#取出换行符
        $hash{$line} += 1;
}
foreach my $k (keys %hash) {
        print SORTED "$k\n";#改行打印出列和该列出现的次数到目标文件
}
close (FILE);
close (SORTED);
#############################################################

将这个#号中的内容添加好以后使用chmod +x 文件名加上权限,使用“./data.pl 源文件 目标文件”命令运行即可